UVA 11859 - Division Game
题目大意
有一个n * m的矩阵,每个元素均为2~10000之间的正整数,两个游戏者轮流操作。每次可选一行中的1个或者多个大于1的整数把它们中的每个数都变成它的某个真因子,比如12可以变成1,2,3,4,5.不能操作的输,也就是说,谁在操作之前,矩阵中的所有数是1,则输。题目要求判断第一个人是否能获胜。
初试博弈论。觉得挺好玩的~^ ^
本题可转化为Nim游戏。
题目要求让一个数变为它的真因子,等价于拿掉一个或者多个它的素因子。(12拿掉素因子2变为6,拿掉素因子3变为4,拿掉两个素因子2为3)这样,就可以每行看做一个火柴堆,每个数的素因子看成火柴。
根据 Bouton定理,状态(x1,x2,x3)为必败状态当且仅当x1 xor x2 xor x3 =0(xor为异或操作)所以我们只需要统计每一行的素因子个数,求和,异或一下判断是否为0即可。
怎么求素因子呢?
可以仿造用Eratosthenes快速构造素数表,
Eratosthenes构造素数表是筛选掉不超过N的每个数的整倍数。如筛选2的时候2*2,2*3,2*4.。。。详见http://blog.csdn.net/murmured/article/details/9400845
OK,这里的话,我们也从2开始,每次筛选素数的倍数。(记得得一次清干净,比如12要干掉2次2)详见代码。。
#include<cstdio>
const int MAXN=10000+2;
int cnt_primer[MAXN];
void primer()
{
int t;
for (int i = 2; i < MAXN; i++)
if(!cnt_primer[i]) //如果不为0,说明不是素数。
{
t=i;
while(t < MAXN)
{
for(int j=t;j < MAXN;j+=t)
cnt_primer[j]++;
t*=i;
}
}
} int main()
{
primer();
int T,n,m,temp,ans,sum;
scanf("%d",&T);
for(int ri=1;ri <= T;ri++)
{
scanf("%d%d",&n,&m);
ans=0;
for(int i=0;i<n;i++)
{
sum=0;
for(int j=0;j<m;j++)
{
scanf("%d",&temp);
sum+= cnt_primer[temp];
}
ans^=sum;
}
printf("Case #%d: %s\n",ri,ans==0?"NO":"YES"); } }
UVA 11859 - Division Game的更多相关文章
- UVA 11859 Division Game[Nim游戏]
题意:给定一个N*M的矩阵,每次可以选择同一行中的若干个数,把它们变成它们的质因子.问说先手的可否获胜. 同一行相当于1堆,数量就是所有数的质因子个数之和 #include <iostream& ...
- 暴力枚举 UVA 725 Division
题目传送门 /* 暴力:对于每一个数都判断,是否数字全都使用过一遍 */ #include <cstdio> #include <iostream> #include < ...
- uva 725 Division(除法)暴力法!
uva 725 Division(除法) A - 暴力求解 Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & ...
- UVA.725 Division (暴力)
UVA.725 Division (暴力) 题意分析 找出abcdefghij分别是0-9(不得有重复),使得式子abcde/fghij = n. 如果分别枚举每个数字,就会有10^10,肯定爆炸,由 ...
- UVa 11859 (Nim) Division Game
把每一行m个数所有的素因子看做一堆,就把问题转化为n堆的Nim游戏. 然后预处理一下10000以内每个数素因数的个数,再根据书上的Bouton定理,计算一下n行素因数个数的异或和. 为0是先手必败局面 ...
- Division Game UVA - 11859 Nim
Code: #include<cstdio> #include<algorithm> using namespace std; #define maxn 10005 int n ...
- uva 725 Division(暴力模拟)
Division 紫书入门级别的暴力,可我还是写了好长时间 = = [题目链接]uva 725 [题目类型]化简暴力 &题解: 首先要看懂题意,他的意思也就是0~9都只出现一遍,在这2个5位数 ...
- Uva 725 Division
0.不要傻傻的用递归去构造出一个五位数来,直接for循环最小到最大就好,可以稍微剪枝一丢丢,因为最小的数是01234 从1234开始,因为倍数n最小为2 而分子是一个最多五位数,所以分母应该小于五万. ...
- uva 725 division(水题)——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABVMAAAOHCAIAAAClwESxAAAgAElEQVR4nOydybGturJFcQEPfgQu4A
随机推荐
- Android照片墙完整版,完美结合 内存方案 LruCache 和 硬盘方案 DiskLruCache
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/34093441 在上一篇文章当中,我们学习了DiskLruCache的概念和基本用法 ...
- 73,QT指针数组实战(指针数组与数组指针)
//指针数组,每一个指针都是一个MainWindow // MainWindow *w[3][4]; // for(int i=0;i<3;i++) // { // for(int j=0;j& ...
- Kinect 开发 —— 手势识别(下)
基本手势追踪 手部追踪在技术上和手势识别不同,但是它和手势识别中用到的一些基本方法是一样的.在开发一个具体的手势控件之前,我们先建立一个可重用的追踪手部运动的类库以方便我们后续开发.这个手部追踪类库包 ...
- 最简单的基于FFmpeg的移动端例子:Android 视频转码器
http://blog.csdn.net/leixiaohua1020/article/details/47056365
- CODEVS——T3008 加工生产调度
http://codevs.cn/problem/3008/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Descr ...
- [翻译]魅族的M1 Note是十分廉价(dirt-cheap)的iphone5C增强版
Meizu's M1 Note is a dirt-cheap iPhone 5c on steroids 魅族的M1 Note是十分廉价(dirt-cheap)的ihone5C增强版 While m ...
- SSO 中间件 kisso
SSO 中间件 kisso kisso = cookie sso,基于 Cookie 的 SSO 中间件.kisso 不是一套完整的登录系统, 它的定位是一把高速开发 java Web 单点登录系 ...
- Trafodion:Transactional SQL on HBase
Trafodion: Transactional SQL on HBase HBase上实时分布式事务处理 介绍 HBase的SQL能力一直不足.Phoenix缺乏Join能力,eBay提出的kyli ...
- 「微信小程序」有哪些冲击与机会?
昨天晚上相信大家的朋友圈被「微信小程序」刷屏了,这影响力赶上了国务院出台新政策一样,足以说明微信在中国的影响力之大. 然后今天公号后台一大堆人问我怎么看这件事,不少人非常忧虑,仿佛自己将要失业一样. ...
- ip地址个数的计算
一个IP地址,却关联太多的知识 二进制与 8 比特 电脑中显示出来的数字是 10 进制的,键盘的每一个键都由一个 8 位的二进制编码,所以 1 字节等于 8 比特.对数字而言,1 的二进制是 0000 ...