[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分的主要内容,如果未能解决你的问题,请参考以下文章

noip2016组合数问题

noip2016 组合数问题

NOIP2016组合数问题

NOIP2016 组合数问题

组合数问题(NOIP2016)

NOIP2016组合数问题