原题:  Turn the pokers
      思路:假设正面为0,反面为1。牌就像这样 000000....... 。考虑到假如可以实现最终反面个数为m, 牌共n张, 则这n张排任取m个为反面其余都为正面的状况都能实现。于是转化为考虑最终可能出现1的个数的集合有哪些。
      因为可能的个数集合是连续的(在最大最小值之内相差2的都可能), 所以每一次翻转之后的上下限都可以根据上一次所得的上下限推出。
      最后算排列组合的适合需要用到组合数递推公式和费马小定理推论\( a^{p-2} \equiv a^{-1} \bmod p \) , 通过快速幂的方法算一下逆元。

其实TLE了n次。。。。。。用位运算简化了一下。。。而且输入那个部分要用scanf才够快。

  1 #include <iostream>

  2 #include <fstream>

  3 #include <cstring>

  4 #include <cstdio>

  5 #include <algorithm>

  6 #include <cmath>

  7 //#define LOCAL

  8 #define fin cin

  9 #define fout cout

 10 #define LL long long int

 11 #define maxn 100000+5

 12 using namespace std;

 13 LL MM=;

 14 LL C[maxn];

 15 LL quickmod(LL a,int b)

 16 {

 17    LL ans=,base=a;

 18 

 19    while(b!=)

 20    {

 21      if(b&)

 22      {

 23         ans=ans*base%MM;

 24     }

 25     b>>=;

 26     base=base*base%MM;

 27 }

 28 

 29 return ans;

 30 }

 31 int main ()

 32 {

 33 #ifdef LOCAL

 34     ofstream fout ("1.out");

 35     ifstream fin ("1.in");

 36 #endif

 37 

 38     int i,j,k;

 39     int n,m,x;

 40 

 41     memset(C,,sizeof(C));

 42 

 43     while(fin>>n>>m)

 44     {

 45 

 46         int left,right,a1,a2;

 47         left=; right=;

 48 

 49         for(i=;i<n;i++)

 50         {

 51             scanf("%d",&x);

 52 

 53 

 54             if(x<=left){ a1=left-x; }

 55             else if(x<=right)

 56                 {   a1= ((left&)==(x&))?:;

 57                 }

 58                 else{

 59                     a1=x-right;

 60                 }

 61 

 62                 if(x<=m-right){ a2=right+x; }

 63                 else if(x<=m-left)

 64                 {

 65                     a2 = (((m-left)&) == (x&)?m:m-);

 66                 }

 67                 else{

 68                     a2=*m-(x+left);

 69                 }

 70 

 71                 left=a1;right=a2;

 72 

 73             }

 74 

 75 

 76             C[]=; C[m]=;

 77 

 78             for(i=;i<=m/+;i++)

 79                 {C[i]=C[i-]*(m-i+)%MM*quickmod(i,MM-)%MM;

 80 

 81                    C[m-i]=C[i];

 82                }

 83 

 84 

 85                LL sum = ;

 86                for(i = left; i<=right; i+=)

 87                 { sum+=C[i];

 88                   sum%=MM;

 89               }

 90 

 91               fout<<sum<<endl;

 92           }

 93 

 94 

 95 #ifdef LOCAL

 96           fin.close();

 97           fout.close();

 98 #endif

 99 

           return ;} 

HDU-4869 Turn the pokers的更多相关文章

  1. HDU 4869 Turn the pokers(推理)

    HDU 4869 Turn the pokers 题目链接 题意:给定n个翻转扑克方式,每次方式相应能够选择当中xi张进行翻转.一共同拥有m张牌.问最后翻转之后的情况数 思路:对于每一些翻转,假设能确 ...

  2. hdu 4869 Turn the pokers (2014多校联合第一场 I)

    Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. HDU 4869 Turn the pokers(思维+组合公式+高速幂)

    pid=4869" target="_blank">Turn the pokers 大意:给出n次操作,给出m个扑克.然后给出n个操作的个数a[i],每一个a[i] ...

  4. HDU 4869 Turn the pokers (2014 Multi-University Training Contest 1)

    Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  5. hdu 4869 Turn the pokers (思维)

    Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. HDU 4869 Turn the pokers (2014多校联合训练第一场1009) 解题报告(维护区间 + 组合数)

    Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  7. hdu 4869 Turn the pokers(组合数+费马小定理)

    Problem Description During summer vacation,Alice stay at home for a long time, with nothing to do. S ...

  8. HDU 4869 Turn the pokers (2014 多校联合第一场 I)

    HDOJ--4869--Turn the pokers[组合数学+快速幂] 题意:有m张扑克,开始时全部正面朝下,你可以翻n次牌,每次可以翻xi张,翻拍规则就是正面朝下变背面朝下,反之亦然,问经过n次 ...

  9. 2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)

    题目链接 题意 : m张牌,可以翻n次,每次翻xi张牌,问最后能得到多少种形态. 思路 :0定义为反面,1定义为正面,(一开始都是反), 对于每次翻牌操作,我们定义两个边界lb,rb,代表每次中1最少 ...

  10. HDU 4869 Turn the pokers(思维+逆元)

    考试的时候没有做出来... 想到了答案一定是一段连续的区间,一直在纠结BFS判断最后的可行1数. 原来直接模拟一遍就可以算出来最后的端点... 剩下的就是组合数取模了,用逆元就行了... # incl ...

随机推荐

  1. VBA Excel 对比两列数据

    Sub Md() ' ' Macro1 Macro ' 宏由 BX 录制,时间: 2012-6-8 ' 宏中的列数可以输入 A - IV 也可以输入 1-256 ' Dim i%, j%, i1%, ...

  2. js- this

    this对象是基于函数在执行的环境绑定的. (一)   this 在闭包环境中指向的对象. <Js高级程序设计>中提到: 每个函数在被调用时,其活动对象都会自动取得两个特殊变量:this和 ...

  3. 小程序de 一些经验1

    尝试着写微信的小程序,一个简单的表单验证.一开始就花了大把的时间尝试如何开始小程序的准备工作. 鼓捣半天,AppId是没有的,于是用了不用appId的模拟版.其实只要下载一个小程序版的微信开发工具. ...

  4. unity3d笔记:控制特效的播放速度

           一般在游戏中,主角或者怪物会受到减速效果,或者攻击速度减慢等类似的状态.本身动作减速的同时,衔接在角色上的特效也需要改变相应的播放速度.一般特效有三个游戏组件:   关键点就是改变Ani ...

  5. (三)Bootstrap.jar

    catalina.bat 在最后启动了bootstrap.jar, 传递了start作为参数(如果多个参数的话,start在尾部). 然后org.apache.catalina.startup.Boo ...

  6. 大三CS狗一点想法

    本文非技术文 十点半游戏的代码大概完成了1/3,想到今晚提早验收完汇编实验,还是副院长亲自验的,似乎很看好我的样子,然后问我的方向,导师和参加的项目.聊了几句后结束了对话,不禁又引发了我的一些思考. ...

  7. [[UIScreen mainScreen] bounds] 返回的屏幕尺寸不对

    在使用cocos2d-iphone 2.0生成项目的时候,用5s测试时全屏中上下一直有黑条,发现[[UIScreen mainScreen] bounds]返回的屏幕尺寸不是320*568的,而是32 ...

  8. [ASP.NET]配置使用SQL Server保存会话状态

    会话状态是ASP.NET应用程序状态的其中一种,这种状态的特点是以用户为单位,每个会话对应一个用户,也就是说在该用户的整个访问过程,会话状态保存的数据都会持续保存于服务器的介质中,直到会话超时(即用户 ...

  9. 怎么用sublime text 3搭建python 的ide

    安装目录的Packages目录下的python文件夹下的Python.sublime-build复制以下内容,保存 {"cmd": ["python", &qu ...

  10. Cassandra-几个基本测试常识

    一 使用ycsb进行装载,每次装载都不会删除以前装载过的. 因此如果想在空数据库中装载,需要先情况数据表. drop命令删除整个表,因此需要重建标头. truncate命令删除表的所有行,只留下表头, ...