题目大意:给你一段圆弧,对应弧度不小于
3
2
π
\frac32\pi
23π,然后在这个弧上随机选择
n
−
1
n-1
n−1个点,求着
n
−
1
n-1
n−1个点和弧的两端点形成的凸包包含圆心的概率。
n
≤
1
0
7
n\le10^7
n≤107
题解:
考虑推式子……一种推法是把弧切均分成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);
}