Gym 100096D Guessing game
Gym 100096D Guessing game
题面
Problem Description
Byteman is playing a following game with Bitman. Bitman writes down some 1 000 000 000-element
sequence of zeros and ones. Byteman’s task is to guess the sequence that Bitman created. He can achieve
this goal by asking Bitman questions of the form: ’What is the parity of the sum of a subsequence of your
sequence, that begins at the b-th element and ends at the e-th element of the sequence?’. After playing
the game for some time, Byteman started suspecting that Bitman was cheating. He would like to know
at which moment did Bitman first answer his question in an inconsistent way, so he asked you for help.
Write a program which:
reads a description of Byteman’s questions and Bitman’s answers,
computes the greatest number N, for which Bitman’s answers for the first N questions are consistent.
Input
The first line of the input file contains one integer n (0 ≤ n ≤ 100 000), denoting the number of Byteman’s
questions. Each of the following n lines describes one Byteman’s question with corresponding Bitman’s
answer in the form of three positive integers b, e and s (1 ≤ b ≤ e ≤ 1 000 000 000, s ∈ {0, 1}), separated
by single spaces. b and e are the indices of the first and the last element of the subsequence in Byteman’s
question. s = 0 means that Bitman answered that the sum was even and s = 1 — that it was odd.
Output
The first and only line of the output file should contain one integer — the greatest value of N such that
there exists a sequence of zeros and ones that is consistent with Bitman’s answers to first N Byteman’s
questions.
题意
给出一些关系,从l到r的1的个数为奇数还是偶数。问从哪组开始是矛盾的。
考虑一个点不是奇数就是偶数,用一个前缀和的形式表示到i为止的前面所有数i的个数是奇数还是偶数。将一个点拆成两个点。
如果一个点的奇数代表和偶数代表相连说明改组关系与之前的肯定矛盾。
若v==1,则将l-1的奇数代表和r的偶数代表相连,l-1的偶数代表和r的奇数代表相连,表示[l,r]中有改变奇偶性。
若v==1,则将l-1的奇数代表和r的奇数代表相连,l-1的偶数代表和r的偶数代表相连,表示[l,r]中未改变奇偶性。
考虑到b,e很大,用map离散化。
代码
#include <bits/stdc++.h>
using namespace std;
int n;
int fa[1000010];
int l[1000010];
int r[1000010];
int v[1000010];
int cnt;
map<int,int> f;
int ans;
int find(int k)
{
return fa[k]==k?k:fa[k]=find(fa[k]);
}
int main()
{
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
cin>>n;
for (int i=1;i<=n;i++)
{
cin>>l[i]>>r[i]>>v[i];
l[i]--;
if (!f[l[i]]) f[l[i]]=++cnt;
if (!f[r[i]]) f[r[i]]=++cnt;
}
for (int i=1;i<=cnt+cnt;i++) fa[i]=i;
for (int i=1;i<=n;i++)
{
int x=f[l[i]],y=f[r[i]];
if (v[i])
{
if (find(x)==find(y)) break;
ans++;
if (find(y+cnt)!=find(x)) fa[fa[x]]=fa[y+cnt];
if (find(x+cnt)!=find(y)) fa[fa[y]]=fa[x+cnt];
}
else
{
if (find(x)==find(y+cnt)) break;
ans++;
if (find(y)!=find(x)) fa[fa[x]]=fa[y];
if (find(x+cnt)!=find(y+cnt)) fa[fa[y+cnt]]=fa[x+cnt];
}
}
cout<<ans<<endl;
return 0;
}
题目链接
http://codeforces.com/gym/100096/attachments
Gym 100096D Guessing game的更多相关文章
- Codeforces Gym 100015G Guessing Game 差分约束
Guessing Game 题目连接: http://codeforces.com/gym/100015/attachments Description Jaehyun has two lists o ...
- 【容斥原理】【推导】【树状数组】Gym - 101485G - Guessing Camels
题意:给你三个1~n的排列a,b,c,问你在 (i,j)(1<=i<=n,1<=j<=n,i≠j),有多少个有序实数对(i,j)满足在三个排列中,i都在j的前面. 暴力求的话是 ...
- GCD Guessing Game Gym - 100085G 猜数字 gcd
http://codeforces.com/gym/100085/attachments 因为那个数字是一个质数,这样的猜的次数是最多的,所以至少是质数次. 但是如果需要猜2.3,那么可以直接猜6,也 ...
- Gym - 100085G - GCD Guessing Game
原题链接 题意一个数字x在1-n之间,现在猜数字,每次猜一个数字a,告知gcd(x, a)的答案,问最坏情况下需要猜几次 分析 考虑素数.当猜的数为一组素数的乘积时,就可以把这些素数都猜出来.那么答案 ...
- ACM: Gym 101047M Removing coins in Kem Kadrãn - 暴力
Gym 101047M Removing coins in Kem Kadrãn Time Limit:2000MS Memory Limit:65536KB 64bit IO Fo ...
- ACM: Gym 101047K Training with Phuket's larvae - 思维题
Gym 101047K Training with Phuket's larvae Time Limit:2000MS Memory Limit:65536KB 64bit IO F ...
- ACM: Gym 101047E Escape from Ayutthaya - BFS
Gym 101047E Escape from Ayutthaya Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I6 ...
- ACM: Gym 101047B Renzo and the palindromic decoration - 手速题
Gym 101047B Renzo and the palindromic decoration Time Limit:2000MS Memory Limit:65536KB 64 ...
- 2632: [neerc2011]Gcd guessing game
2632: [neerc2011]Gcd guessing game Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 144 Solved: 84[S ...
随机推荐
- Mac下JDK、Maven、Tomcat、Git开发安装及环境变量配置
本文主要内容: - 1.Mac OS 10.11.6 [OS X EL Captain] - 2.Mac OS 安装Java 设置环境变量 - 3.Mac OS 安装Maven设置环境变量 - 4.M ...
- 小程序 picker 多列选择器 数据动态获取
需求是将各校区对应各班级的数据 以两列选择器的方式展示出来,并且可以在选择完成之后记录选结果参数. 校区数据 和 班级数据 分别是两个接口,以 校区 teach_area_id 字段关联 其各班级数据 ...
- ecplise自动提示失效,使用补全自动提示快捷键(Alt+/),但只显示“No Default Proposals”
在这里设置了自动提示,但是在使用的时候自动提示实现了.甚至使用补全自动提示快捷键(Alt+/),只显示“No Default Proposals”.今天在网上搜索了一下结果,主要有一下几种方法: 1. ...
- Repeater控件添加序号列
在项目开发过程中,会经常遇到ASP.NET repeater控件添加序号列,有些新手可能还不会,网上搜集整理了一些,需要的朋友可以参考下 ASP.NET repeater添加序号列的方法 1.< ...
- taglib简介
在 JSP最佳实践的 上一期,您学习了一种基于scriptlet的技术,这种技术被用来将上次修改的时间戳添加到JavaServer Page(JSP)文件中.不幸的是,比起它所提供的短期利益,scri ...
- eigen Matrix详解
Eigen Matrix 详解 在Eigen中,所有的matrices 和vectors 都是模板类Matrix 的对象,Vectors 只是一种特殊的矩阵,行或者列为1. Matrix的前三个模板参 ...
- PAT 甲级 1019 General Palindromic Number(20)(测试点分析)
1019 General Palindromic Number(20 分) A number that will be the same when it is written forwards or ...
- 同一个线程多次调用start()会出现的问题
结果: 线程首先会运行一次,然后抛出java.lang.IllegalThreadStateException异常. 根据控制台的异常信息,定位到Thread.java的第708行,也就start() ...
- 转录组分析---Hisat2+StringTie+Ballgown使用
转录组分析---Hisat2+StringTie+Ballgown使用 (2016-10-10 08:14:45) 转载▼ 标签: 生物信息学 转录组 1.Hisat2建立基因组索引: First ...
- POJ3422或洛谷2045 Kaka's Matrix Travels
POJ原题链接 洛谷原题链接 很裸的费用流. 将每个点\(x\)拆成\(x_1,x_2\),并从\(x_1\)向\(x_2\)连一条容量为\(1\),费用为该点的权值的边,以及一条容量为\(+\inf ...