洛谷—— P1869 愚蠢的组合数

https://www.luogu.org/problemnew/show/1869

题目描述

最近老师教了狗狗怎么算组合数,狗狗又想到了一个问题。。。

狗狗定义C(N,K)表示从N个元素中不重复地选取K个元素的方案数。

狗狗想知道的是C(N,K)的奇偶性。

当然,这个整天都老是用竖式算123456789*987654321=?的人不会让你那么让自己那么轻松,它说:“N和K都可能相当大。”

但是狗狗也犯难了,所以它就找到了你,想请你帮他解决这个问题。

输入输出格式

输入格式:

 

第1行:一个正整数t,表示数据的组数。

第2~2+t-1行:两个非负整数N和K。(保证k<=n)

 

输出格式:

 

每一组输入,如果C(N,K)是奇数则输出1,否则输出0。

 

输入输出样例

输入样例#1: 复制
3
1 1
1 0
2 1
输出样例#1: 复制
1
1
0

说明

数据范围

对于30% 的数据,n<=10^2 t<=10^4

对于50% 的数据,n<=10^3 t<=10^5

对于100%的数据,n<=10^8 t<=10^5

 

打表找规律

 1 #include <cstdio>
 2 
 3 const int N(100);
 4 int C[233][223];
 5 
 6 int main()
 7 {
 8     freopen("out.txt","w",stdout);
 9     for(int i=0; i<=N; ++i)
10     {
11         C[i][i]=C[i][0]=1;
12         for(int j=1; j<i; ++j)
13             C[i][j]=C[i-1][j-1]+C[i-1][j];
14     }
15     for(int i=0; i<=100; ++i)
16     {
17         for(int j=0; j<=i; ++j)
18         {
19             //if(i&j) printf("%d %d--",i,j);
20             if((i&j)==j) printf("%d %d 1\n",i,j);
21             if(C[i][j]&1) printf("%d %d\n",i,j);
22         }
23 //            printf("%d--%d : %d \n",i,j,C[i][j]&1);
24         puts("");
25     }
26     return 0;
27 }
 1 #include <cstdio>
 2 
 3 inline void read(int &x)
 4 {
 5     x=0; register char ch=getchar();
 6     for(; ch>'9'||ch<'0'; ) ch=getchar();
 7     for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0';
 8 }
 9 
10 int Presist()
11 {
12     int t; read(t);
13     for(int n,m; t--; )
14         read(n),read(m),
15         printf("%d\n",((n&m)==m));
16     return 0;
17 }
18 
19 int Aptal=Presist();
20 int main(int argc,char**argv){;}

 

posted @ 2017-11-27 21:27  Aptal丶  阅读(330)  评论(1编辑  收藏  举报