关于刚才CF的C
  • 板块学术版
  • 楼主Lynkcat
  • 当前回复5
  • 已保存回复5
  • 发布时间2020/10/25 01:17
  • 上次更新2023/11/5 09:57:03
查看原帖
关于刚才CF的C
120911
Lynkcat楼主2020/10/25 01:17

为什么我被fst了啊/fad 太害怕了

//QwQcOrZ yyds!!!
#include<bits/stdc++.h>
#define int long long
using namespace std;

inline int read(){
    int x = 0; char ch = getchar(); bool positive = 1;
    for (; !isdigit(ch); ch = getchar())	if (ch == '-')	positive = 0;
    for (; isdigit(ch); ch = getchar())	x = x * 10 + ch - '0';
    return positive ? x : -x;
}
inline void write(int a){
    if(a>=10)write(a/10);
    putchar('0'+a%10);
}
inline void writesp(int a){
    if(a>=10)write(a/10);
    putchar('0'+a%10);
    printf(" ");
}
inline void writeln(int a){
    if(a<0){
    	a=-a; putchar('-');
    }
    write(a); puts("");
}
#define N 110000
#define mod 1000000007
using namespace std;
int n, k, a[N], b[N], jc[N], l, Ans;
int qpow(int x, int y) {
	if(x == 0) return 0;
	int res = 1;
	while(y) {
		if(y & 1) res = 1ll * res * x % mod;
		x = 1ll * x * x % mod, y >>= 1;
	}
	return res;
}
int ny(int x) {
	return qpow(x, mod-2);
}
int C(int x, int y) {
	if (y==0) return 1;
	return 1ll * jc[x] * ny(jc[y]) % mod * ny(jc[x - y]) % mod;
} 
int f[N],x,pos,r,mid,cnt1,cnt2;
signed main()
{
	jc[0] = 1;
	for(int i = 1; i <= 10000; i++) jc[i] = 1ll * jc[i-1] * i % mod;
	f[0]=1;
	for (int i=1;i<=1000;i++) f[i]=f[i-1]*i%mod;
	n=read(),x=read(),pos=read();
	l=0;r=n;
	while (l<r)
	{
		mid=(l+r)/2;
		if (pos<mid)
		{
//			a[mid]=1;
			cnt1++;
			r=mid;
		} else
		{
//			a[mid]=-1;
			if (pos!=mid) cnt2++;
			l=mid+1;
		}
		//cout<<pos<<" "<<mid<<endl;
	}
	//cout<<cnt1<<" "<<cnt2<<endl;
	writeln(C(n-x,cnt1)*f[cnt1]%mod*C(x-1,cnt2)*f[cnt2]%mod*f[n-cnt1-cnt2-1]%mod);
}
2020/10/25 01:17
加载中...