博弈论

  我哭……思路错误WA了6次?(好像还有手抖点错……)

  本题是要求Nim游戏的第一步必胜策略有几种。

  一开始我想:先全部异或起来得到ans,从每个比ans大的堆里取走ans个即可,答案如此累计……WA!

  第二次:ans与每个a[i]取&,如果不为0即有一种方案……WA!

  第三次:ans与每个a[i]取&,如果结果等于ans则有一种方案……WA!

  第四次:ans与每个a[i]取^,如果结果<=a[i]则有一种方案……AC!

sigh……果然应该“三思”而后行……(附一例子,25/17/22这三堆的异或和为30,方案数为3)

  首先我们明白,异或和ans>0意味着可以通过取走一些石子使得异或和=0,当然从某一堆中取走ans颗石子满足这个条件,但是并不是必须这样做(比如上面的例子,这样做的方案数为0)。对于一堆石子a[i],我们取多少颗可以使得异或和=0呢?当然是ans^a[i]颗啦,当然如果这一堆本身就没有那么多颗就是一种不合法的方案,所以答案应该是思路四那种= =

 1 Source Code
 2 Problem: 2975        User: sdfzyhy
 3 Memory: 400K        Time: 0MS
 4 Language: G++        Result: Accepted
 5
 6     Source Code
 7
 8     //POJ 2975
 9     #include<cstdio>
10     #define F(i,j,n) for(int i=j;i<=n;++i)
11     int getint(){
12         int v=0,sign=1; char ch=getchar();
13         while(ch<'0'||ch>'9'){ if (ch=='-') sign=-1; ch=getchar();}
14         while(ch>='0'&&ch<='9'){ v=v*10+ch-'0'; ch=getchar();}
15         return v*=sign;
16     }
17     const int N=1e7+10;
18     /******************tamplate*********************/
19     int a[1010];
20     int main(){
21         int n;
22         while(scanf("%d",&n)!=EOF && n){
23             int ans=0,s=0;
24             F(i,1,n) {a[i]=getint(); ans^=a[i];}
25             if (ans) F(i,1,n) if ((a[i]^ans)<=a[i]) s++;
26             printf("%d\n",s);
27         }
28         return 0;
29     }

View Code

转载于:https://www.cnblogs.com/Tunix/p/4304396.html

【POJ】【2975】Nim相关推荐

  1. 【POJ3126 Prime Path】【POJ 3087 Shuffle'm Up】【UVA 11624 Fire!】【POJ 3984 迷宫问题】

    POJ3126Prime Path 给定两个四位素数a  b,要求把a变换到b 变换的过程要 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数  与  前一步得到的素数  只能有一个位 ...

  2. 【poj题集整理】【存下来并不会看】

    主要是整理起来自己用的.网上有多个版本. 初级: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)   ...

  3. 【POJ/算法】 3259 Wormholes(Bellman-Ford算法, SPFA ,FLoyd算法)

    Bellman-Ford算法 Bellman-Ford算法的优点是可以发现负圈,缺点是时间复杂度比Dijkstra算法高.而SPFA算法是使用队列优化的Bellman-Ford版本,其在时间复杂度和编 ...

  4. 【POJ 2482】 Stars in Your Window(线段树+离散化+扫描线)

    [POJ 2482] Stars in Your Window(线段树+离散化+扫描线) Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  5. BZOJ 2287 【POJ Challenge】消失之物

    2287: [POJ Challenge]消失之物 Description ftiasch 有 N 个物品, 体积分别是 W1, W2, ..., WN. 由于她的疏忽, 第 i 个物品丢失了. &q ...

  6. 【POJ 3026】Borg Maze

    [POJ 3026]Borg Maze 一个考察队搜索alien 这个考察队能够无限切割 问搜索到全部alien所须要的总步数 即求一个无向图 包括全部的点而且总权值最小(最小生成树 BFS+最小生成 ...

  7. 【POJ 3273】 Monthly Expense (二分)

    [POJ 3273] Monthly Expense (二分) 一个农民有块地 他列了个计划表 每天要花多少钱管理 但他想用m个月来管理 就想把这个计划表切割成m个月来完毕 想知道每一个月最少花费多少 ...

  8. 【POJ 2485】 Highways

    [POJ 2485] Highways 最小生成树模板 Prim #includeusing namespace std;int mp[501][501]; int dis[501]; bool vi ...

  9. 2287. 【POJ Challenge】消失之物(数组递推\分治优化背包)

    2287. [POJ Challenge]消失之物 这题的思想和P4564 [CTSC2018]假面优化的思想一样,应该反过来说,假面那个题应该是借鉴这题的思路. 显然不能枚举每个物品消失O(n)O( ...

  10. bzoj2287【POJ Challenge】消失之物 缺一01背包

    bzoj2287[POJ Challenge]消失之物 缺一01背包 链接 bzoj 思路 分治solve(l,r,arr)表示缺少物品\([l,r]\)的dp数组arr. 然后solve(l,mid ...

最新文章

  1. R语言ggplot2可视化使用ggplot2::ggsave函数和gridextra::marrangegrob函数将多个可视化结果保存在pdf文件中
  2. Waymo自动驾驶汽车扎堆冲进死胡同,一天多达50辆,附近居民蚌埠住了
  3. 饿了么多活利器:实时双向复制工具(DRC)
  4. Java 算法 寂寞的数
  5. linux 命令find
  6. 访问 Confluence 6 的计划任务配置
  7. JAVA的Random类(转)
  8. Android Gradle 完整指南(转)
  9. c语言字符串拼接变量,C语言实现字符串拼接
  10. 树莓派zero 2w i2c操作 rda5807收音机芯片记录(电台差转站点远程监听可行性探讨)
  11. 银行爱“IOE”爱得有多深
  12. 题目234 吃土豆
  13. We never been grown up
  14. 七夕界的浪漫之光,向你安利程序员的表白方式
  15. c语言iota函数,C++ iota函数用法详解
  16. Python实现ACO蚁群优化算法优化支持向量机回归模型(SVR算法)项目实战
  17. 计算机视觉-图像处理基础
  18. java.lang.OutOfMemoryError
  19. 广义互相关 matlab,关于小波分析和广义互相关
  20. 人工智能技术在软件开发中的应用

热门文章

  1. yii框架相关知识(转)
  2. 雷人的调查:荷兰女性的安全意识
  3. mysql忘记密码可以卸载吗_mysql忘记密码,修改密码重新安装的一些问题
  4. Explore Nonprofit Cloud Case Management
  5. 模式扩展 ——简单工厂+配置文件解除耦合 *****
  6. OpenWRT 随记
  7. sdut 2506 完美网络(优先队列)
  8. 第十一周项目实践1 图基本算法库
  9. sqrtm--矩阵的平方根
  10. compareHist函数