[Sdoi2016]排列计数
来源:互联网 发布:程序员入门书籍 编辑:程序博客网 时间:2024/06/05 16:53
问题 A: [Sdoi2016]排列计数
时间限制: 3 Sec 内存限制: 512 MB题目描述
求有多少种长度为 n 的序列 A,满足以下条件:1 ~ n 这 n 个数在序列中各出现了一次若第 i 个数 A[i] 的值为 i,则称 i 是稳定的。序列恰好有 m 个数是稳定的满足条件的序列可能很多,序列数对 10^9+7 取模。输入
第一行一个数 T,表示有 T 组数据。接下来 T 行,每行两个整数 n、m。T=500000,n≤1000000,m≤1000000输出
输出 T 行,每行一个数,表示求出的序列数
样例输入
51 01 15 2100 5010000 5000
样例输出
012057802888760695423
T掉的lucas p大时用lucas
#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<queue>#include<map>#include<cstdlib>#include<algorithm>#define V 1000010#define mod 1000000007#define LL long longusing namespace std;int n,m;LL mb[V],md[V];inline LL qp(LL x,LL y){LL md=1;while(y){if(y&1)md=(LL)md*x%mod;x=(LL)x*x%mod;y>>=1;}return md;}inline LL get(int x,int y){if(x<y)return 0;if(y>x-y)y=x-y;LL s1=1,s2=1;for(int i=0;i<y;i++){s1=(LL)s1*(x-i)%mod;s2=(LL)s2*(i+1)%mod;}return s1*qp(s2,mod-2)%mod;}inline LL cc(int x,int y){if(y==0)return 1;return get(x%mod,y%mod)%mod;}inline int haha(){ // freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout); // freopen("permutation.in","r",stdin);freopen("permutation.out","w",stdout); int t; LL x=1; for(int i=2;i<=V-5;i++) if(i%2) mb[i]=(mb[i-1]*i-1)%mod;elsemb[i]=(mb[i-1]*i+1)%mod;//cin>>t;scanf("%d",&t); while(t--) { // cin>>n>>m; scanf("%d%d",&n,&m); if(m>n) { printf("0\n"); //cout<<0<<endl; continue; } if(m==0){ printf("%d\n",mb[n]); //cout<<0<<endl; continue; } if(n==1||n==m) { printf("1\n"); //cout<<0<<endl; continue; } printf("%lld\n",cc(n,m)*mb[n-m]%mod);}return 0; }int gg=haha();int main(){;}p小时直接用 阶乘
#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<queue>#include<map>#include<cstdlib>#include<algorithm>#define V 1000010#define mod 1000000007#define LL long longusing namespace std;int n,m;LL mb[V],md1[V],md2[V];inline LL qp(LL x,LL y){LL md=1;while(y){if(y&1)md=(LL)md*x%mod;x=(LL)x*x%mod;y>>=1;}return md;}inline int haha(){ //freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);// freopen("permutation.in","r",stdin);freopen("permutation.out","w",stdout); int t; LL x=1; md1[0]=1; md1[1]=md2[1]=1; for(int i=2;i<=V-5;i++) { x*=i;x%=mod; md1[i]=x; md2[i]=qp(x,mod-2); if(i%2) mb[i]=(mb[i-1]*i-1)%mod;elsemb[i]=(mb[i-1]*i+1)%mod; } scanf("%d",&t); while(t--) { // cin>>n>>m; scanf("%d%d",&n,&m); if(m>n) { printf("0$%^\n"); //cout<<0<<endl; continue; } if(m==0){ printf("%d\n",mb[n]); //cout<<0<<endl; continue; } if(n==1||n==m) { printf("1\n"); //cout<<0<<endl; continue; } printf("%lld\n",md1[n]%mod*md2[n-m]%mod*md2[m]%mod*mb[n-m]%mod);}return 0; }int gg=haha();int main(){;}
阅读全文
0 0
- [bzoj4517][SDOI2016]排列计数
- bzoj4517: [Sdoi2016]排列计数
- BZOJ4517 [Sdoi2016]排列计数
- bzoj4517【SDOI2016】排列计数
- 【bzoj4517】【SDOI2016】排列计数
- 4517: [Sdoi2016]排列计数
- bzoj4517: [Sdoi2016]排列计数
- BZOJ4517: [Sdoi2016]排列计数
- [Sdoi2016]排列计数
- 4517: [Sdoi2016]排列计数
- bzoj4517: [Sdoi2016]排列计数
- bzoj4517 [Sdoi2016]排列计数
- 4517: [Sdoi2016]排列计数
- BZOJ4517 [Sdoi2016][排列计数]
- bzoj 4517: [Sdoi2016]排列计数
- BZOJ 4517: [Sdoi2016]排列计数
- bzoj 4517: [Sdoi2016]排列计数
- 【BZOJ】4517 [Sdoi2016]排列计数
- 简单知识——跨页面信息传递
- 深入理解红黑树
- erewrwerwer
- 我值多少钱
- (CSU
- [Sdoi2016]排列计数
- Faster R-CNN学习笔记
- python easygui
- SQLMap用户手册【超详细】(转)
- 关于Faster R-CNN的一切——笔记3:Faster R-CNN
- Fast R-CNN论文详解
- BZOJ 1015 星球大战 逆向并查集
- 三级缓存
- python 继承