Codeforces 851E-Arpa and a game with Mojtaba
来源:互联网 发布:java 抓取网页内容 编辑:程序博客网 时间:2024/05/17 22:22
E. Arpa and a game with Mojtaba
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard outputMojtaba and Arpa are playing a game. They have a list of n numbers in the game.
In a player’s turn, he chooses a number pk (where p is a prime number and k is a positive integer) such that pk divides at least one number in the list. For each number in the list divisible by pk, call it x, the player will delete x and add to the list. The player who can not make a valid choice of p and k loses.
Mojtaba starts the game and the players alternatively make moves. Determine which one of players will be the winner if both players play optimally.
InputThe first line contains a single integer n (1 ≤ n ≤ 100) — the number of elements in the list.
The second line contains n integers a1, a2, …, an (1 ≤ ai ≤ 109) — the elements of the list.
OutputIf Mojtaba wins, print “Mojtaba”, otherwise print “Arpa” (without quotes).
You can print each letter in any case (upper or lower).
Examples
Input4
1 1 1 1Output
Arpa
Input
4
1 1 17 17Output
Mojtaba
Input
4
1 1 17 289Output
Arpa
Input
5
1 2 3 4 5Output
Arpa
博弈论的题,看了题解说是对每个质数分开暴力求sg函数,然后把sg异或起来就可以了,最后还是基本抄了别人的代码,自己加了点注释
代码:
#include <bits/stdc++.h>using namespace std;#define mem(s,v) memset(s,v,sizeof(s))typedef long long ll;const double PI = acos(-1);const ll mod = 1000000007;const int inf = 0x3f3f3f3f;const ll INF = 0x3f3f3f3f3f3f3f3f;map<int,int> mp,sg;int dfs(int mask) //求出该状态的SG函数 为其所有后继状态的mex{ if(!mask)return 0; if(sg.find(mask)!=sg.end())return sg[mask]; //记忆化 int mx=0; for(int i=1;i<30;i++) if(mask>>i&1)mx=i; int vis=0; for(int i=1;i<=mx;i++) { int tmask=((mask>>(i+1))<<1)|(mask&((1<<i)-1)); //枚举进行除以p^i的操作 所有比i大的都减少i //(mask>>(i+1))<<1)表示高于i的都减少i (mask&((1<<i)-1))表示低i位全部不变 vis|=(1<<dfs(tmask)); } int res=0; for(int i=30;i>=0;i--) if(~vis>>i&1)res=i; return sg[mask]=res;}int main(){ int n; scanf("%d",&n); for(int i=0;i<n;i++) { int a; scanf("%d",&a); for(int i=2;i*i<=a;i++) if(a%i==0) { int cnt=0; while(a%i==0) a/=i,cnt++; mp[i]|=(1<<cnt); } if(a>1)mp[a]|=(1<<1); } int sum=0; for(auto itr=mp.begin();itr!=mp.end();itr++) sum^=dfs(itr->second); printf("%s\n",(sum==0 ? "Arpa" : "Mojtaba")); return 0;}
- Codeforces 851E-Arpa and a game with Mojtaba
- 解题报告:Codeforces Round #432 (Div. 2) E.Arpa and a game with Mojtaba (博弈)
- Codeforces Round #432 (Div. 2) D. Arpa and a list of numbers E. Arpa and a game with Mojtaba
- Codeforces Round #432 (Div. 2) (Codeforces 850C) E. Arpa and a game with Mojtaba 博弈+状态压缩
- Codeforces Round #432 C. Arpa and a game with Mojtaba 裸博弈+质数拆解
- codeforces 850C Arpa and a game with Mojtaba(博弈,bitmask)
- Codeforces Round #432 Div. 1 C. Arpa and a game with Mojtaba
- Codeforces 851 A Arpa and a research in Mexican wave
- Codeforces 851A Arpa and a research in Mexican wave
- Codeforces 851D. Arpa and a list of numbers
- Codeforces 851A && Round #432 Div. 2 A. Arpa and a research in Mexic
- Codeforces 851A . Arpa and a research in Mexican wave 水题
- codeforces 851 D. Arpa and a list of numbers(前缀和+bruteforce)
- Codeforces 851D Arpa and a list of numbers【思维+前缀和】
- Codeforces 851 D. Arpa and a list of numbers(技巧)
- Codeforces 851D Arpa and a list of numbers Round #432 (Div. 2
- Codeforces 851 D Arpa and a list of numbers(前缀和)
- Codeforces 851D Arpa and a list of numbers (枚举+分段)
- 理解ES6 Promise
- twisted高并发库transport函数处理数据包的些许问题
- C语言程序设计习题1-17 编写一个程序,打印长度大于80个字符的所有输入行
- CF850B-Arpa and a list of numbers
- IAR for STM8下载、安装、破解及新建工程教程
- Codeforces 851E-Arpa and a game with Mojtaba
- centos7 安装php7.0
- 在VS2010上搭建FFMPEG环境与SDL环境配置
- Linux信号量机制
- 第三十三天
- 设计模式之装饰者模式
- C语言中的与或操作
- JAVA REENTRANTLOCK、SEMAPHORE 的实现与 AQS 框架
- GBDT实战