发电机感觉!!! - 组合数学 - 概率

题目大意:给你一段圆弧,对应弧度不小于 3 2 π \frac32\pi ,然后在这个弧上随机选择 n 1 n-1 个点,求着 n 1 n-1 个点和弧的两端点形成的凸包包含圆心的概率。 n 1 0 7 n\le10^7
题解:
考虑推式子……一种推法是把弧切均分成k段,然后求一个答案然后另k足够大取极限(其实就是求导),场上这么玩的。
另一种方法就是仍然考虑计算不合法的,枚举哪一段大于 π \pi 了,然后相当于剩下的点都在删掉这 π \pi 的弧长之后随意选择。
然后没了。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define Rep(i,v) rep(i,0,(int)v.size()-1)
#define mod 998244353
#define lint long long
#define ull unsinged lint
#define db long double
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define gc getchar()
#define debug(x) cerr<<#x<<"="<<x
#define sp <<" "
#define ln <<endl
using namespace std;
typedef pair<int,int> pii;
typedef set<int>::iterator sit;
inline int inn()
{
    int x,ch;while((ch=gc)<'0'||ch>'9');
    x=ch^'0';while((ch=gc)>='0'&&ch<='9')
        x=(x<<1)+(x<<3)+(ch^'0');return x;
}
inline int fast_pow(int x,int k,int ans=1) { for(;k;k>>=1,x=(lint)x*x%mod) if(k&1) ans=(lint)ans*x%mod;return ans; }
int main()
{
    int t=inn(),n=inn()-1;
    int ans=(1-(lint)n*fast_pow((180ll-t)*fast_pow(360-t,mod-2)%mod,n-1)%mod+mod)%mod;
    return !printf("%d\n",ans);
}

猜你喜欢

转载自blog.csdn.net/Mys_C_K/article/details/89335683