NC51097 Parity game
题目
题目描述
Now and then you play the following game with your friend. Your friend writes down a sequence consisting of zeroes and ones. You choose a continuous subsequence (for example the subsequence from the third to the fifth digit inclusively) and ask him, whether this subsequence contains even or odd number of ones. Your friend answers your question and you can ask him about another subsequence and so on. Your task is to guess the entire sequence of numbers.
You suspect some of your friend's answers may not be correct and you want to convict him of falsehood. Thus you have decided to write a program to help you in this matter. The program will receive a series of your questions together with the answers you have received from your friend. The aim of this program is to find the first answer which is provably wrong, i.e. that there exists a sequence satisfying answers to all the previous questions, but no such sequence satisfies this answer.
输入描述
The first line of input contains one number, which is the length of the sequence of zeroes and ones. This length is less or equal to 1000000000. In the second line, there is one positive integer which is the number of questions asked and answers to them. The number of questions and answers is less or equal to 5000. The remaining lines specify questions and answers. Each line contains one question and the answer to this question: two integers (the position of the first and last digit in the chosen subsequence) and one word which is either even or odd (the answer, i.e. the parity of the number of ones in the chosen subsequence, where even means an even number of ones and odd means an odd number).
输出描述
There is only one line in output containing one integer X. Number X says that there exists a sequence of zeroes and ones satisfying first X parity conditions, but there exists none satisfying X+1 conditions. If there exists a sequence of zeroes and ones satisfying all the given conditions, then number X should be the number of all the questions asked.
示例1
输入
10
5
1 2 even
3 4 odd
5 6 even
1 6 even
7 10 odd
输出
3
题解
知识点:并查集。
每次条件给出了一个区间 \([l,r]\) 的 \(01\) 串中 \(1\) 的个数是奇数还是偶数,区间很难处理,但我们可以转化为 \(sum[r]-sum[l-1]\) ,即 \(sum[i]\) 表示 \([1,i]\) 之间 \(1\) 的个数。若 \([l,r]\) 是偶数,则 \(sum[r]\) 和 \(sum[l-1]\) 一定是同奇偶;否则就是异奇偶。
如此就转换成端点的种类的相对关系了,而且题目只需要我们检查条件矛盾个数,那就自然而然使用扩展域并查集。
由于节点编号很大,采用遇到一个节点初始化一个节点的策略,并用 \(map\) 离散化记录。
时间复杂度 \(O(q \log n)\)
空间复杂度 \(O(n)\)
代码
#include <bits/stdc++.h>
using namespace std;
unordered_map<int, int> fa;
int find(int x) {
return fa[x] == x ? x : fa[x] = find(fa[x]);
}
void merge(int x, int y) {
fa[find(x)] = find(y);
}
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, q;
cin >> n >> q;
int cnt;
n++;///范围从0开始到n
for (cnt = 0;cnt < q;cnt++) {
int x, y;
string op;
cin >> x >> y >> op;
if (!fa.count(x - 1)) fa[x - 1] = x - 1, fa[x - 1 + n] = x - 1 + n;
if (!fa.count(y)) fa[y] = y, fa[y + n] = y + n;
if (op == "even") {
if (find(x - 1) == find(y + n)) break;
else {
merge(x - 1, y);
merge(x - 1 + n, y + n);
}
}
else if (op == "odd") {
if (find(x - 1) == find(y)) break;
else {
merge(x - 1, y + n);
merge(x - 1 + n, y);
}
}
}
cout << cnt << '\n';
return 0;
}
NC51097 Parity game的更多相关文章
- Codeforces 549C. The Game Of Parity[博弈论]
C. The Game Of Parity time limit per test 1 second memory limit per test 256 megabytes input standar ...
- 51nod1204 Parity
如果sm[j]和sm[i]奇偶性相同,那么(i+1,j)个数为偶数如果奇偶性相同看成是朋友,不同的看成是敌人,那么就跟bzoj1370的做法差不多了. 如果奇偶性相同,就将x和y合并,x+n,y+n合 ...
- Codeforces Round #180 (Div. 2) C. Parity Game 数学
C. Parity Game 题目连接: http://www.codeforces.com/contest/298/problem/C Description You are fishing wit ...
- POJ 1733 Parity game (并查集)
Parity game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6816 Accepted: 2636 Descr ...
- 1003. Parity(并查集)
1003 看篇国家论文 <从<parity>的解法谈程序优化> 对于区间i,j 如果用sum[i],sum[j]来表示到i的1的个数的奇偶性 那么仔细想下 sum[i-1] 若 ...
- poj 1733 Parity game
Parity game 题意:一个长度为N(N < 1e9)内的01串,之后有K(K <= 5000)组叙述,表示区间[l,r]之间1的个数为odd还是even:问在第一个叙述矛盾前说了几 ...
- UVA 11464 Even Parity(部分枚举 递推)
Even Parity We have a grid of size N x N. Each cell of the grid initially contains a zero(0) or a on ...
- HDU-2700 Parity
http://acm.hdu.edu.cn/showproblem.php?pid=2700 题目意思很重要: //e:是要使字符串中1的个数变成偶数.o:是要使字符串中1的个数变成奇数 Parit ...
- Codeforces 549C The Game Of Parity(博弈)
The Game Of Parity Solution: 这个题只需要分类讨论就可以解决. 先分别统计奇数和偶数的个数. 然后判断谁走最后一步,如果走最后一步时候同时有偶数和奇数,那么走最后一步的赢. ...
- HDOJ/HDU 2700 Parity(奇偶判断~)
Problem Description A bit string has odd parity if the number of 1's is odd. A bit string has even p ...
随机推荐
- UPF - Power Intent Basic
Mainstream Low Power techniques Low Vth - 阈值电压比较低,翻转时间小,漏电流比较大,功耗大,速度快 High Vth - 阈值电压比较高,翻转时间长,漏电流比 ...
- 使用Swagger,在编写配置类时报错Caused by: java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()" because "this.condition" is null
1.问题 Caused by: java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet. ...
- [转帖]django使用html渲染页面样式+数据库管理员的创建
一.django页面渲染 1.在templates中创建html格式的文件-index.html,在该文件中添加body,设置样式,比如: <h1 style = "backgroun ...
- [转帖]一文读懂 HugePages(大内存页)的原理
https://juejin.cn/post/6956541214426398757 在介绍 HugePages 之前,我们先来回顾一下 Linux 下 虚拟内存 与 物理内存 之间的关系. 物理内存 ...
- [转帖]谈谈ClickHouse性能情况以及相关优化
https://zhuanlan.zhihu.com/p/349105024 ClickHouse性能情况 主要分为4个方面 1.单个查询吞吐量 场景一: 如果数据被放置在page cache中,则一 ...
- [转帖]Jmeter之JDBC Request使用方法(oracle)
https://zhuanlan.zhihu.com/p/121747788 JDBC Request: 这个sampler可以向数据库发送一个jdbc请求(sql语句),它经常需要和JDBC Con ...
- [转帖]人大金仓- KWR 报告初体验
[本文正在参与炫"库"行动-人大金仓有奖征文] 开发者请集结丨炫"库"行动--2021人大金仓征文大赛悬赏万元等你来! 最近一直在研究 Oracle 的 AWR ...
- [转帖]一份快速实用的 tcpdump 命令参考手册
http://team.jiunile.com/blog/2019/06/tcpdump.html tcpdump 简介 对于 tcpdump 的使用,大部分管理员会分成两类.有一类管理员,他们熟知 ...
- [转帖]ubuntu开启sar记录日志
https://www.cnblogs.com/ishmaelwanglin/p/16955227.html 背景 之前一直用CentOS系统,最近换到了ubuntu的,sar日志对分析系统状态和基本 ...
- Win10 查看无线局域网的密码
1. 打开命令行 输入 control 打开控制面板 2. 进入网络和共享中心 3. 打开连接 4. 使用如下进行查看.