https://www.nowcoder.com/acm/contest/161/B

题意:两个人van游戏,n堆石子,每次只能取这堆石子数目的因子个数,没得取的人输,问第一个人的必胜策略有多少种

题解:sg函数,通过可取的石子数来打sg函数,然后枚举每一堆第一步取的石子数,sg函数异或起来看是不是0,可以发现复杂度就是n*因子个数

  1. //#pragma GCC optimize(2)
  2. //#pragma GCC optimize(3)
  3. //#pragma GCC optimize(4)
  4. //#pragma GCC optimize("unroll-loops")
  5. //#pragma comment(linker, "/stack:200000000")
  6. //#pragma GCC optimize("Ofast,no-stack-protector")
  7. //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  8. #include<bits/stdc++.h>
  9. #define fi first
  10. #define se second
  11. #define db double
  12. #define mp make_pair
  13. #define pb push_back
  14. #define pi acos(-1.0)
  15. #define ll long long
  16. #define vi vector<int>
  17. #define mod 1000000007
  18. #define ld long double
  19. #define C 0.5772156649
  20. #define ls l,m,rt<<1
  21. #define rs m+1,r,rt<<1|1
  22. #define pll pair<ll,ll>
  23. #define pil pair<int,ll>
  24. #define pli pair<ll,int>
  25. #define pii pair<int,int>
  26. //#define cd complex<double>
  27. #define ull unsigned long long
  28. #define base 1000000000000000000
  29. #define Max(a,b) ((a)>(b)?(a):(b))
  30. #define Min(a,b) ((a)<(b)?(a):(b))
  31. #define fin freopen("a.txt","r",stdin)
  32. #define fout freopen("a.txt","w",stdout)
  33. #define fio ios::sync_with_stdio(false);cin.tie(0)
  34. template<typename T>
  35. inline T const& MAX(T const &a,T const &b){return a>b?a:b;}
  36. template<typename T>
  37. inline T const& MIN(T const &a,T const &b){return a<b?a:b;}
  38. inline void add(ll &a,ll b){a+=b;if(a>=mod)a-=mod;}
  39. inline void sub(ll &a,ll b){a-=b;if(a<0)a+=mod;}
  40. inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
  41. inline ll qp(ll a,ll b){ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
  42. inline ll qp(ll a,ll b,ll c){ll ans=1;while(b){if(b&1)ans=ans*a%c;a=a*a%c,b>>=1;}return ans;}
  43. using namespace std;
  44. const double eps=1e-8;
  45. const ll INF=0x3f3f3f3f3f3f3f3f;
  46. const int N=100000+10,maxn=200000+10,inf=0x3f3f3f3f;
  47. vi v[N];
  48. int sg[N],Hash[N],a[N];
  49. void getsg(int n)
  50. {
  51. for(int i=1;i<N;i++)
  52. for(int j=i;j<N;j+=i)
  53. v[j].pb(i);
  54. memset(sg,0,sizeof sg);
  55. for(int i=1;i<=n;i++)
  56. {
  57. for(int j=0;j<v[i].size();j++)
  58. Hash[sg[i-v[i][j]]]=1;
  59. for(int j=0;j<=n;j++)
  60. if(!Hash[j])
  61. {
  62. sg[i]=j;
  63. break;
  64. }
  65. for(int j=0;j<v[i].size();j++)
  66. Hash[sg[i-v[i][j]]]=0;
  67. }
  68. }
  69. int main()
  70. {
  71. getsg(100000);
  72. int n,sum=0,ans=0;
  73. scanf("%d",&n);
  74. for(int i=1;i<=n;i++)scanf("%d",&a[i]),sum^=sg[a[i]];
  75. for(int i=1;i<=n;i++)
  76. {
  77. for(int j=0;j<v[a[i]].size();j++)
  78. {
  79. int x=v[a[i]][j];
  80. if((sg[a[i]-x]^sum^sg[a[i]])==0)ans++;
  81. }
  82. }
  83. printf("%d\n",ans);
  84. return 0;
  85. }
  86. /********************
  87. ********************/

Wannafly挑战赛23B游戏的更多相关文章

  1. Wannafly挑战赛25游记

    Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...

  2. Wannafly挑战赛24游记

    Wannafly挑战赛24游记 A - 石子游戏 题目大意: A和B两人玩游戏,总共有\(n(n\le10^4)\)堆石子,轮流进行一些操作,不能进行下去的人则输掉这局游戏.操作包含以下两种: 把石子 ...

  3. Wannafly挑战赛27

    Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...

  4. Wannafly 挑战赛 19 参考题解

    这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...

  5. Wannafly挑战赛21A

    题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...

  6. Wannafly挑战赛25C 期望操作数

    Wannafly挑战赛25C 期望操作数 简单题啦 \(f[i]=\frac{\sum_{j<=i}f[j]}{i}+1\) \(f[i]=\frac{f[i]}{i}+\frac{\sum_{ ...

  7. Wannafly挑战赛18B 随机数

    Wannafly挑战赛18B 随机数 设\(f_i\)表示生成\(i\)个数有奇数个1的概率. 那么显而易见的递推式:\(f_i=p(1-f_{i-1})+(1-p)f_{i-1}=(1-2p)f_{ ...

  8. Wannafly挑战赛22游记

    Wannafly挑战赛22游记 幸运的人都是相似的,不幸的人各有各的不幸. --题记 A-计数器 题目大意: 有一个计数器,计数器的初始值为\(0\),每次操作你可以把计数器的值加上\(a_1,a_2 ...

  9. 【Wannafly挑战赛4】F 线路规划 倍增+Kruskal+归并

    [Wannafly挑战赛4]F 线路规划 题目描述 Q国的监察院是一个神秘的组织.这个组织掌握了整个帝国的地下力量,监察着Q国的每一个人.监察院一共有N个成员,每一个成员都有且仅有1个直接上司,而他只 ...

随机推荐

  1. Elasticsearch查询Index以及删除

    查询Index信息 GET /bank HTTP/1.1Host: localhost:9200 { "bank": { "aliases": {}, &quo ...

  2. HDU 4576 Robot

    思路 概率dp 既然是求概率,顺推 显然有转移\(dp[i][j]=dp[i-1][j-w]/2+dp[i-1][w]/2\) 然后是环,注意特判一下 环上不要用取模处理循环的情况,会被卡常 代码 # ...

  3. Unity3D学习笔记(三十七):顶点偏移和溶解

    顶点偏移 沿向量方向偏移,沿自身坐标系方向偏移 沿法线方向偏移,球体放大,立方体拆分 Shader "Lesson/VFVertOffsetVertex" { Properties ...

  4. HDU 6155 Subsequence Count(矩阵乘法+线段树+基础DP)

    题意 给定一个长度为 \(n\) 的 \(01\) 串,完成 \(m\) 种操作--操作分两种翻转 \([l,r]\) 区间中的元素.求区间 \([l,r]\) 有多少个不同的子序列. \(1 \le ...

  5. OpenCV学习一《Linux下安装OpenCV》

    第一步:安装源码前先安装好需要的第三⽅方环境 需要的编译环境■ [compiler] sudo apt-get install build-essential #  注释说明 64位ubuntu在安装 ...

  6. shell script 脚本编程

    介绍 Shell脚本编程30分钟入门 Shell 教程 Linux 的 Shell 种类众多,常见的有: Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again ...

  7. Latex citation using natbib and footnotesize

    References: Natbib bibliography styles How to change font size for bibliography? Latex citation usin ...

  8. KNN——图像分类

    内容参考自:https://zhuanlan.zhihu.com/p/20894041?refer=intelligentunit 用像素点的rgb值来判断图片的分类准确率并不高,但是作为一个练习kn ...

  9. centos7 修改密码

    Centos7破解密码的方法   Centos7忘记密码   在工作或者自己练习的时候我们难免会大意忘掉自己的root密码,有些同学忘掉密码竟然第一选择是重装系统,工作中可万万使不得! 本篇博客将讲解 ...

  10. arcgis api for js 之发布要素服务

    1. 引言 如果我们要在网页端实现要素的增删改查操作,需要使用到要素服务(FeatureService),本篇文章将介绍如何发布要素服务. 1.1 什么是要素服务 在发布之前,我们先了解下要素服务:要 ...