P1869 愚蠢的组合数
题目描述
最近老师教了狗狗怎么算组合数,狗狗又想到了一个问题。。。
狗狗定义 C(N,K)C(N,K)C(N,K) 表示从 NNN 个元素中不重复地选取 KKK 个元素的方案数。
狗狗想知道的是 C(N,K)C(N,K)C(N,K) 的奇偶性。
当然,这个整天都老是用竖式算 123456789×987654321=?123456789 \times 987654321=?123456789×987654321=? 的人不会让你那么让自己那么轻松,它说:“ NNN 和 KKK 都可能相当大”。
但是狗狗也犯难了,所以它就找到了你,想请你帮他解决这个问题。
输入格式
第一行一个正整数 ttt,表示数据的组数。
第 222 至第 2+t−12+t-12+t−1 行,每行有两个非负整数 NNN 和 KKK,描述每组数据。数据保证 k≤nk\le nk≤n。
输出格式
每一组输入,如果 C(N,K)C(N,K)C(N,K) 是奇数则输出 111,否则输出 000。
输入输出样例 #1
输入 #1
3
1 1
1 0
2 1
输出 #1
1
1
0
说明/提示
数据范围及约定
对于 100%100\%100% 的数据,1≤n≤1051\le n\le 10^51≤n≤105,1≤t≤1051\le t\le 10^51≤t≤105。
C++实现
#include<cstdio>
#include<cctype>
using namespace std;
int read(){
int abs=0;char c=getchar();
while(!isdigit(c))
c=getchar();
while(isdigit(c)) {
abs=abs*10+c-'0';
c=getchar();
}
return abs;
}//读入优化
int main(){
int t=read();
while(t--){
int n=read(),k=read();
bool i=1;
while(n>=2&&i){
if((!(n&1))&(k&1)) i=0;//x&1==1则x为奇数
n>>=1;k>>=1;//x>>=1等效于x/=2
}
putchar(i?'1':'0');
putchar('\n');
}
return 0;
}

后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

被折叠的 条评论
为什么被折叠?



