hdu 4642 Fliping game
http://acm.hdu.edu.cn/showproblem.php?pid=4642
对于给定的矩阵 操作步数的奇偶性是确定的
奇数步Alice赢 否则Bob赢
从左上角向右下角遍历遇到1就进行一次处理 遍历到 (x,y) 的时候必须保证 所有(x,y)左上方的点都处理完了
可以根据左上方处理时对(x,y)产生的影响 判断(x,y)的状态
代码:
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<string>
- #include<cstring>
- #include<cmath>
- #include<set>
- #include<vector>
- #include<list>
- using namespace std;
- typedef long long ll;
- typedef pair<double,double>ppd;
- const double PI = acos(-1.);
- const double eps = (1e-9);
- const int MOD=10007;
- const int N=105;
- int a[N][N];
- int c[N][N];
- int lowbit(int x)
- {
- return x&(-x);
- }
- void add(int x,int y)
- {
- for(int i=x;i<N;i=i+lowbit(i))
- for(int j=y;j<N;j=j+lowbit(j))
- ++c[i][j];
- }
- int get(int x,int y)
- {
- int tmp=0;
- for(int i=x;i>=1;i=i-lowbit(i))
- for(int j=y;j>=1;j=j-lowbit(j))
- tmp+=c[i][j];
- return tmp;
- }
- int main()
- {
- //freopen("data.in","r",stdin);
- int T;
- scanf("%d",&T);
- for(int ca=1;ca<=T;++ca)
- {
- memset(c,0,sizeof(c));
- memset(a,0,sizeof(a));
- int n,m;
- scanf("%d %d",&n,&m);
- for(int i=1;i<=n;++i)
- for(int j=1;j<=m;++j)
- scanf("%d",&a[i][j]);
- int ans=0;
- for(int i=1;i<=n;++i)
- {
- for(int x=i,y=1;x>=1&&y<=m;--x,++y)
- if((a[x][y]+get(x,y))&1)
- {
- ++ans;
- add(x,y);
- }
- }
- for(int j=2;j<=m;++j)
- {
- for(int x=n,y=j;x>=1&&y<=m;--x,++y)
- if((a[x][y]+get(x,y))&1)
- {
- ++ans;
- add(x,y);
- }
- }
- if((ans&1))
- printf("Alice\n");
- else
- printf("Bob\n");
- }
- return 0;
- }
hdu 4642 Fliping game的更多相关文章
- hdu 4642 Fliping game(博弈)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4642 题意:给定一个棋盘,0表示向下,1表示向上,选一个x,y, 然后翻转从x,y 到n,m.的所有硬币, ...
- HDU 4642 Fliping game (简单博弈)
Fliping game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- HDU 4642 Fliping game (2013多校4 1011 简单博弈)
Fliping game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- 【多校练习4签到题】HDU 4642—— Fliping game
来源:点击打开链接 看上去很难,比赛的时候光看hehe了,也没有想. 但是仔细想想,是可以想出来的.一个棋盘上每个格子摆放一个硬币,硬币有正面1和反面0之分.现在两个人可以按照规则翻硬币,选择(x,y ...
- HDU 4642 (13.08.25)
Fliping game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- hdu 4642 博弈
思路:不管是Alice,还是Bob,每次操作都会影响最右下角的数,那么如果是1,Alice赢,否则Bob赢 #include<iostream> #include<cstdio> ...
- hdu 4642 翻硬币
在一个n*m的棋盘上 每一个格子都有一枚硬币 1表示正面 0表示反面你每次可以选择一个硬币为正面的点,然后从该点与右下角点形成的矩阵硬币全都反向,直到一个人没有硬币可以选择则输Alice先手 列举了几 ...
- 【 2013 Multi-University Training Contest 4 】
HDU 4632 Palindrome subsequence dp[x][y]表示区间[x,y]构成回文串的方案数. 若str[x]==str[y],dp[x][y]=dp[x+1][y]+dp[x ...
- hdu4642 Fliping game ——博弈
link:http://acm.hdu.edu.cn/showproblem.php?pid=4642 refer to: http://www.cnblogs.com/jackge/archive/ ...
随机推荐
- li ul 说明
复制代码代码如下: <div id="menu"> <ul> <li><a href="#">首页</ ...
- SQL Server数据库性能优化(二)之 索引优化
参考文献 http://isky000.com/database/mysql-performance-tuning-index 原文作者是做mysql 优化的 但是我觉得 在索引方面 ...
- 关于ebox
看了介绍,觉得挺不错的东西,希望能够一路走下去 老话题STM32编程,新思路,一样是编程,味道却大有不同.这就是STM32之eBox编程.让你提议不一样的编程,让开发快到你意想不 ...
- Java多线程编程——进阶篇一
一.线程栈模型与线程的变量 要理解线程调度的原理,以及线程执行过程,必须理解线程栈模型. 线程栈是指某一时刻内存中线程调度的栈信息,当前调用的方法总是位于栈顶.线程栈的内容是随着程序的运行动态变化的, ...
- ES6最具魔力的特性——生成器
ES6生成器(Generators)简介 我们从一个示例开始: function* quips(name) { yield "你好 " + name + "!" ...
- [3] 智能指针std::auto_ptr
[1]std::auto_ptr 对于编译器来说,智能指针实质是一个栈对象,而并非指针类型. 智能指针通过构造函数获取堆内存的管理所有权,而在其生命期结束时,再通过析构函数释放由它所管理的堆内存. 所 ...
- Centos7下Rinetd安装与应用
Linux下做地址NAT有很多种方法.比如haproxy.nginx的4层代理,linux自带的iptables等都能实现.haproxy.nginx就不说了,配置相对简单:iptables配置复杂, ...
- 用代码来理解 C#委托与事件
C#中委托是什么?事件是委托吗? 1.委托是讲方法作为参数代入另一个方法中, 委托可以理解为指向一个函数的引用. class Program { public delegate void Delega ...
- python(九)re模块
python中re模块提供了正则表达式相关操作. 1. 字符串匹配: . 匹配除换行符以外的任意字符 \w 匹配字符或数字或下划线或汉字 \s 匹配任意空白字符 \d 匹配数字 \b 匹配单词 ...
- easyui datagrid 仿ext—右键
var createGridHeaderContextMenu = function(e, field) { e.preventDefault(); var grid = $(this);/* gri ...