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的更多相关文章

  1. Codeforces Gym 100015G Guessing Game 差分约束

    Guessing Game 题目连接: http://codeforces.com/gym/100015/attachments Description Jaehyun has two lists o ...

  2. 【容斥原理】【推导】【树状数组】Gym - 101485G - Guessing Camels

    题意:给你三个1~n的排列a,b,c,问你在 (i,j)(1<=i<=n,1<=j<=n,i≠j),有多少个有序实数对(i,j)满足在三个排列中,i都在j的前面. 暴力求的话是 ...

  3. GCD Guessing Game Gym - 100085G 猜数字 gcd

    http://codeforces.com/gym/100085/attachments 因为那个数字是一个质数,这样的猜的次数是最多的,所以至少是质数次. 但是如果需要猜2.3,那么可以直接猜6,也 ...

  4. Gym - 100085G - GCD Guessing Game

    原题链接 题意一个数字x在1-n之间,现在猜数字,每次猜一个数字a,告知gcd(x, a)的答案,问最坏情况下需要猜几次 分析 考虑素数.当猜的数为一组素数的乘积时,就可以把这些素数都猜出来.那么答案 ...

  5. 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 ...

  6. ACM: Gym 101047K Training with Phuket's larvae - 思维题

     Gym 101047K Training with Phuket's larvae Time Limit:2000MS     Memory Limit:65536KB     64bit IO F ...

  7. ACM: Gym 101047E Escape from Ayutthaya - BFS

    Gym 101047E Escape from Ayutthaya Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I6 ...

  8. ACM: Gym 101047B Renzo and the palindromic decoration - 手速题

     Gym 101047B  Renzo and the palindromic decoration Time Limit:2000MS     Memory Limit:65536KB     64 ...

  9. 2632: [neerc2011]Gcd guessing game

    2632: [neerc2011]Gcd guessing game Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 144  Solved: 84[S ...

随机推荐

  1. jsplumb流程器使用3--connector

    jsPlumb.getInstance内可以放一个对象 对象内可选地提供默认值:  connector:  连接器(直线--a straight line,  贝塞尔曲线--a Bezier curv ...

  2. pyinstller的安装

    下载:http://www.pyinstaller.org/ 解压到目录 切换到python目录 执行命令: python.exe D:\Download\PyInstaller-2.1\setup. ...

  3. SSH Secure Shell链接Ubuntu报错Server responded "Algorithm negotiation failed"

    vim /etc/ssh/sshd_config Ciphers aes128-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr,3 ...

  4. python 字符串 列表 字典 常用方法

    今天学习内容如下: 1.学习昨天练习题目的解题新方法 #1.使用while循环输入 1 2 3 4 5 6 8 9 10 ''' count = 0 while count < 10: coun ...

  5. Liunx 重定向,管道符(转)

    原作网址:http://blog.csdn.net/qq_16811963/article/details/52997178 输出重定向 >代表以覆盖的方式将命令的正确输出输出到指定的文件或设备 ...

  6. Linux Centos7 虚拟机上网设置

    一.Windows下网卡,共享上网模式 二.虚拟机VMnet8的网卡模 三.Linux 下配置网卡 命令: vi /etc/sysconfig/network-scripts/ifcfg-ens33 ...

  7. html 转化成 pdf

  8. NC 5的开发环境起不了客户端

    5的开发环境,中间件启动无异常,但是在起客户端时报错,连中间件也关闭了. 添加图中两个jdk下的包

  9. laravel错误1071 Specified key was too long; max key length is 1000 bytes

    Laravel 5.5 环境,php artisan migrate 之后,出现错误如题. 检查了一下,代码是这样的: $table->increments('id'); $table-> ...

  10. Intellij idea 系列教程之常用配置项

    Intellij idea 系列教程之常用配置项 Intellij idea 系列教程目录(https://www.cnblogs.com/binarylei/p/10347600.html) Lan ...