校内模拟赛 coin
题意:
n*m的棋盘,每个格子可能是反着的硬币,正着的硬币,没有硬币,每次可以选未选择的一行或者未选择的一列,将这一行/列的硬币取反。如果没有可选的或者硬币已经全部正面,那么游戏结束。
最后一次操作的选手获得一分,如果最终棋盘上的硬币全是正面,那么双方都获得两分,问先手最多的多少分。
分析:
双方的最优策略一定是尽量使硬币全是正面,然后在考虑最后一次操作。
如果局面不可能使硬币全是正面,那么输出(n+m)&1。考虑如何判断。
如果(i,j)硬币,如果是正面,那么i->j连一条权值为0的边,否则连一条权值为1的。从一个点开始染色,使整张图满足边权等于两个点权的异或值。边权为0表示两个点要么同时选,要么同时不选,为1表示两个点只能选一个。
如果可以使硬币全是正面,然后对于一个联通块,可能是两种方式涂色,即确定一个点的颜色后,整个联通块也确定了。记录两个方式涂色后1的个数。
一共有三种可能,两种方式1的个数都是偶数,都是奇数,一个是偶数一个是奇数。那么偶偶与奇奇的没法改变,只有偶奇的根据第一个人选的这个联通块的颜色来确定。
那么讨论一下即可。
或者求sg值后异或起来。
代码
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cmath>
#include<cctype>
#include<set>
#include<queue>
#include<vector>
#include<map>
#include<bitset>
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ;
int col[N], e[N][N], n, m, c1, c2;
vector<int> T[N];
char s[N][N]; bool dfs(int u) {
col[u] ? c1 ++ : c2 ++;
for (int i = ; i < T[u].size(); ++i) {
int v = T[u][i];
if (col[v] == -) {
col[v] = col[u] ^ e[u][v];
if (dfs(v)) return ;
}
else {
if (col[v] != col[u] ^ e[u][v]) return ;
}
}
return ;
}
void solve() {
n = read(), m = read();
for (int i = ; i <= n; ++i) scanf("%s", s[i] + );
for (int i = ; i <= ; ++i) T[i].clear();
memset(col, -, sizeof(col)); memset(e, , sizeof(e));
for (int i = ; i <= n; ++i)
for (int j = ; j <= m; ++j) {
if (s[i][j] == 'e') continue;
T[i].push_back(j + n); T[j + n].push_back(i);
if (s[i][j] == 'o') e[i][j + n] = e[j + n][i] = ;
else if (s[i][j] == 'x') e[i][j + n] = e[j + n][i] = ;
}
int ans1 = , ans2 = ;
for (int i = ; i <= n + m; ++i) {
if (col[i] == -) {
col[i] = ;
c1 = , c2 = ;
if (dfs(i)) { cout << ((n + m) & ) << "\n"; return ; }
c1 %= , c2 %= ;
if (c1 && c2) ans1 ++;
else if (c1 ^ c2) ans2 ++;
}
}
ans1 %= , ans2 %= ;
if (ans1 | ans2) puts("");
else puts("");
for (int i = ; i <= n + m; ++i) T[i].clear();
}
int main() {
for (int T = read(); T --; solve());
return ;
}
校内模拟赛 coin的更多相关文章
- 【20170521校内模拟赛】热爱生活的小Z
学长FallDream所出的模拟赛,个人感觉题目难度还是比较适中的,难度在提高+左右,可能比较接近弱省省选,总体来讲试题考查范围较广,个人认为还是很不错的. 所有试题如无特殊声明,开启-O2优化,时限 ...
- Java实现蓝桥杯第十一届校内模拟赛
有不对的地方欢迎大佬们进行评论(ง •_•)ง 多交流才能进步,互相学习,互相进步 蓝桥杯交流群:99979568 欢迎加入 o( ̄▽ ̄)ブ 有一道题我没写,感觉没有必要写上去就是给你多少MB然后求计 ...
- 【20170920校内模拟赛】小Z爱学习
所有题目开启-O2优化,开大栈空间,评测机效率为4亿左右. T1 小 Z 学数学(math) Description 要说小 Z 最不擅长的学科,那一定就是数学了.这不,他最近正在学习加法运算.老 ...
- 校内模拟赛 Zbq's Music Challenge
Zbq's Music Challenge 题意: 一个长度为n的序列,每个位置可能是1或者0,1的概率是$p_i$.对于一个序列$S$,它的得分是 $$BasicScore=A\times \sum ...
- 校内模拟赛 Attack's Fond Of LeTri
Attack's Fond Of LeTri 题意: n个房子m条路径边的无向图,每个房子可以最终容纳b个人,初始有a个人,中途超过可以超过b个人,每条边有一个长度,经过一条边的时间花费为边的长度.求 ...
- 校内模拟赛 SovietPower Play With Amstar
SovietPower Play With Amstar 题意: 一棵二叉树,每次询问一条路径上的路径和,初始每个点有一个权值1,询问后权值变为0.$n \leq 10^7,m\leq10^6$ 分析 ...
- 校内模拟赛 虫洞(by NiroBC)
题意: n个点m条边的有向图,每一天每条边存在的概率都是p,在最优策略下,询问从1到n的期望天数. 分析: dijkstra. 每次一定会优先选dp最小的后继走,如果这条边不存在,选次小的,以此类推. ...
- 校内模拟赛 旅行(by NiroBC)
题意: n个点的无向图,Q次操作,每次操作可以连接增加一条边,询问两个点之间有多少条边是必经之路.如果不连通,输出-1. 分析: 首先并查集维护连通性,每次加入一条边后,如果这条边将会连接两个联通块, ...
- 校内模拟赛 Label
题意: n个点m条边的无向图,有些点有权值,有些没有.边权都为正.给剩下的点标上数字,使得$\sum\limits_{(u,v)\in E}len(u,v) \times (w[u] - w[v]) ...
随机推荐
- Bootstrap源码分析系列之初始化和依赖项
在上一节中我们介绍了Bootstrap整体架构,本节我们将介绍Bootstrap框架第二部分初始化及依赖项,这部分内容位于源码的第8~885行,打开源码这部分内容似乎也不是很难理解.但是请站在一个开发 ...
- net.exe use命令的使用
net.exe use 查看当前的连接 net.exe use * /del /y 断开所有连接 net.exe use \\server\share "password" /us ...
- 微信小程序里使用阿里巴巴矢量图标
登录 阿里巴巴矢量图标 (https://www.iconfont.cn) 选中图标,加入购物车图标 下载源代码 解析出来如下文件结构 有两种使用方式: 1)不转换成base64的文件 找到 icon ...
- How HashMap works in java 2
https://www.javacodegeeks.com/2014/03/how-hashmap-works-in-java.html Most common interview questio ...
- Java 重写 hashCode() 和 equals() 方法
1. hashCode 1.1 基本概念 hashCode 是 JDK 根据对象的地址算出来的一个 int 数字(对象的哈希码值),代表了该对象再内存中的存储位置. hashCode() 方法是超级类 ...
- 在servlet中用spring @Autowire注入Bean
在servlet中新增init方法: public void init(ServletConfig config) { super.init(config); SpringBeanAutowiring ...
- 作为一名GIS从业人员,这些网站你应该关注
前言:今年工作的第二年,端午节后,入职新公司.总算是回归本行,从事GIS相关工作.这个系列算是对在公司工作和学习成长的记录吧. 数据篇: 作为遥感的商业应用,首先考虑的是遥感数据的产品化. ...
- [python]如何理解uiautomator里面的 child, child_by_text, sibling,及使用场景
如何理解uiautomator里面的 child, child_by_text, sibling,我们借助android原生的uiautomatorviewer抓取的控件来进行理解 以如下图进行详细讲 ...
- BZOJ4892:[TJOI2017]dna(hash)
Description 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其中不超过3个碱基,依然能够表 ...
- Opatching PSU in Oracle Database 11g Release 2 RAC on RHEL6
Opatching PSU in Oracle Database 11g Release 2(11.2.0.4) RAC on RHEL6 1) 升级opatch工具 1.1) For GI home ...