ZOJ 3529 A Game Between Alice and Bob(博弈)
来源:互联网 发布:java 敏感词检测 编辑:程序博客网 时间:2024/05/29 02:41
每次可以用一个数的因子来替换这个数,那么可以先分解质因数,找出这个数有几个质因子,用这个数的某个因子来替换它可以等效为拿走这个数的某些质因子。
所以每个数可以变成由它的质因子构成的堆,堆的大小即为质因子的个数,每次的操作是拿走若干个质因子,这就是nim博弈问题了。
先预处理出每个数所对应的质因子的个数,可以在筛素数的时候进行处理。
#include <iostream>#include<cstdio>#include<cstring>using namespace std;int factor[5000005];bool vis[5000005];int solve(int a,int b){ int ret=0; while(!(a%b)){ ret++; a/=b; } return ret;}void init(){ int i,j; for(i=2;i<=5000000;i++){ if(!vis[i]) { for(j=2*i;j<=5000000;j+=i){ vis[j]=1; factor[j]+=solve(j,i); } factor[i]=1; } }}int tmp[100005];int main(){ int n,i,sum,ncase=0,j; init(); while(~scanf("%d",&n)){ sum=0; for(i=1;i<=n;i++){ scanf("%d",tmp+i); sum^=factor[tmp[i]]; } printf("Test #%d: ",++ncase); if(!sum){ puts("Bob"); } else{ int ans; for(i=1;i<=n;i++){ for(j=0;j<factor[tmp[i]];j++){ if((sum^factor[tmp[i]]^j)==0){ ans=i; goto mark; } } } mark: ; printf("Alice %d\n",ans); } } return 0;}
0 0
- ZOJ 3529 A Game Between Alice and Bob(博弈)
- ZOJ 3529 A Game Between Alice and Bob (数论+SG博弈)
- ZOJ 3529 A Game Between Alice and Bob 博弈好题
- Zoj 3529 A Game Between Alice and Bob (数学_博弈)
- ZOJ 3529 - A Game Between Alice and Bob(素因子+博弈)
- Zoj 3529 A Game Between Alice and Bob
- A Game Between Alice and Bob(zoj 3529)
- ZOJ 3529 A Game Between Alice and Bob
- zoj3529 A Game Between Alice and Bob 博弈
- ZOJ 3529 A Game Between Alice and Bob(博弈论-sg函数)
- ZOJ-#3529 A Game Between Alice and Bob(Nim和+素数因子)
- [博弈论]A Game Between Alice and Bob
- zoj3529 A Game Between Alice and Bob
- A Game Between Alice and Bob
- ZOJ 3666 Alice and Bob(博弈)
- ZOJ 3666 Alice and Bob 基础博弈
- zoj3529 A Game Between Alice and Bob 质因子个数NIM
- ZOJ 3666 Alice and Bob(博弈 sg 函数入门)
- etcd命令
- C语言函数--E
- 接下来开始我的嵌入式之路
- CentOS学习笔记
- ios GCD
- ZOJ 3529 A Game Between Alice and Bob(博弈)
- 3 坐标系统和内存管理
- 黑马程序员——JAVA基础——继承、abstract、interface
- div盒子的几种放置模式
- TCP 的那些事儿(下)
- POJ 1704 StaircaseNim
- hdu 4545
- 七十三、八十四,阎王不接自己去
- WIN32 MENU