[NOIP2016]组合数问题 17.5.21 40分
Posted ioioioioioio
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[NOIP2016]组合数问题 17.5.21 40分相关的知识,希望对你有一定的参考价值。
★ 输入文件:problem.in
输出文件:problem.out
简单对比
时间限制:1 s
内存限制:512 MB
【题目描述】
【输入格式】
从文件中读入数据。
第一行有两个整数t, k,其中t代表该测试点总共有多少组测试数据,k的意义见【问题描述】。
接下来t行每行两个整数n, m,其中n, m的意义见【问题描述】。
【输出格式】
输出到文件中。
t行,每行一个整数代表所有的0<=i<=n,0<=j<=min(i,m)中有多少对(i, j)满足C(j,i)是k的倍数。
【样例1输入】
1 2 3 3
【样例1输出】
1
【提示】
在所有可能的情况中,只有C(1,2)是2的倍数。
【样例2输入】
2 5 4 5 6 7
【样例2输出】
0 7
【来源】
打个暴力,骗分40,正解嘛,先不看了,好像用dp:
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #define ll long long 6 7 using namespace std; 8 9 inline void read (int &x) 10 { 11 char c=getchar(); 12 x=0; 13 while(c<‘0‘||c>‘9‘)c=getchar(); 14 while(c>=‘0‘&&c<=‘9‘)x=x*10+c-‘0‘,c=getchar(); 15 } 16 17 inline ll C(int a,int b) 18 { 19 ll Fz=1,Fm=1; 20 if(a==1) 21 return b; 22 for(int i=(a+1);i<=b;i++) 23 Fz*=i; 24 for(int i=1;i<=(b-a);i++) 25 Fm*=i; 26 if(Fz%Fm==0) 27 return Fz/Fm; 28 else return 1; 29 } 30 int main() 31 { 32 freopen("problem.in","r",stdin); 33 freopen("problem.out","w",stdout); 34 int T,n,m,k; 35 36 read(T); 37 read(k); 38 39 while(T--) 40 { 41 read(n); 42 read(m); 43 int Answer=0; 44 45 for(int i=1;i<=n;i++) 46 for(int j=1;j<=min(i,m);j++) 47 { 48 if(!(C(j,i)%k)) 49 Answer++; 50 } 51 52 printf("%d\n",Answer); 53 } 54 return 0; 55 }
以上是关于[NOIP2016]组合数问题 17.5.21 40分的主要内容,如果未能解决你的问题,请参考以下文章