zoukankan      html  css  js  c++  java
  • codevs1504愚蠢的组合数 / RQNOJ愚蠢的组合数

    1504 愚蠢的组合数

     

     时间限制: 2 s
     空间限制: 128000 KB
     题目等级 : 黄金 Gold
     
     
     
    题目描述 Description

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

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

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

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

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

    数据范围(高精度)

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

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

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

    输入描述 Input Description

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

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

    输出描述 Output Description

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

    样例输入 Sample Input

    3

    1 1

    1 0

    2 1

    样例输出 Sample Output

    1

    1

    0

    数据范围及提示 Data Size & Hint

    预备知识

    C(n, 0) = C(n, n) = 1 (n > 0;)
    C(n, k) = C(n − 1, k − 1) + C(n − 1, k) (0 < k < n)

    需要高精度优化

    其实并不需要高精度

    如果按我的做法的话

    有一个定律:

    如果n&k==k则c(n,k)为奇数

    否则为偶数

    那就很简单了

    上代码!

    还有一件事……

    位运算要加括号!!!!!!!!!!!

    括号!!!!!!!!!!!!!!!!

    括号!!!!!!!!!!!!!!!!

     

     1 2  3  4 5 
     6 
     7 #include<iostream>
     8 #include<cstdio>
     9 using namespace std;
    10 
    11 int n,k;
    12 int q;
    13 
    14 int main()
    15 {
    16 scanf("%d",&q);
    17 while(q--)
    18 {
    19 scanf("%d%d",&n,&k);
    20 if((n & k) == k)printf("1
    ");//一定要加括号,位运算的运算优先级小于等号
    21 else    printf("0
    ");
    22 }
    23 return 0;
    24 }
  • 相关阅读:
    Linux操作_常用命令操作练习
    Linux编程_Shell脚本练习题
    Linux操作_grep/egrep工具的使用
    Linux中的链接文件_软链接和硬链接
    Linux操作_磁盘管理_增加虚拟磁盘
    Linux命令_磁盘管理_查看磁盘或目录的容量
    Linux命令_用户身份切换
    使用Unity中的Box Collider组件完成游戏场景中的碰撞检测功能
    在Unity场景中更改天空盒的步骤
    Linux命令_用户和用户组管理
  • 原文地址:https://www.cnblogs.com/kuaileyongheng/p/7065498.html
Copyright © 2011-2022 走看看