题目描述

Tom和Bob在玩一个游戏:他写一个由0和1组成的序列。

Tom选其中的一段(比如第3位到第5位),问他这段里面有奇数个1还是偶数个1。Bob回答你的问题,然后Tom继续问。

Bob有可能在撒谎。Tom要检查Bob的答案,指出在Bob的第几个回答一定有问题。

有问题的意思就是存在一个01序列满足这个回答前的所有回答,而且不存在序列满足这个回答前的所有回答及这个回答。

输入

第1行一个整数,是这个01序列的长度(<=1000000000)

第2行一个整数,是问题和答案的个数。

第3行开始是问题和答案,每行先有两个整数,表示你询问的段的开始位置和结束位置。

然后是Bob的回答。odd表示有奇数个1,even表示有偶数个1。

输出

输出一行,一个数X,表示存在一个01序列满足第1到第X个回答,但是不存在序列满足第1到第X+1个回答。如果所有回答都没问题,你就输出所有回答的个数。

样例输入

10
5
1 2 even
3 4 odd
5 6 even
1 6 even
7 10 odd

样例输出

3

提示

【样例说明】

第4条与之前有矛盾,前3条没问题

【数据规模和约定】

最多10000个问题

经典并查集

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,len;
int a[10005],b[10005],t[10005],c[21000],p[21000];
int f[21000],dis[21000];
char s[10];
int erfen(int l,int r,int s)
{int mid=(l+r)/2;if(s==p[mid]) return mid;if(s>p[mid]) return erfen(mid+1,r,s);if(s<p[mid]) return erfen(l,mid-1,s);
}
int get(int x)
{if(f[x]==x) return x;int t=f[x];f[x]=get(f[x]);dis[x]=(dis[x]+dis[t])%2;return f[x];
}
int main()
{cin>>n>>m;for(int i=1;i<=m;i++) {scanf("%d%d%s",&a[i],&b[i],s+1);a[i]--;c[i*2-1]=a[i];c[i*2]=b[i];if(s[1]=='e') t[i]=0;else t[i]=1;}sort(c+1,c+2*m+1);int x=-1;for(int i=1;i<=2*m;i++) if(c[i]!=x) {len++;p[len]=c[i];x=c[i];}for(int i=1;i<=len;i++) {f[i]=i;dis[i]=0;}for(int i=1;i<=m;i++) {int x=erfen(1,len,a[i]);int y=erfen(1,len,b[i]);int u=get(x);int v=get(y);if(u==v) {if(t[i]==0) {if(dis[x]!=dis[y]) {cout<<i-1<<endl;return 0;}}else{if(dis[x]==dis[y]) {cout<<i-1<<endl;return 0;}}   }else{f[v]=u;if(t[i]==0) {if(dis[x]!=dis[y]) dis[v]=(dis[v]+1)%2;}else{if(dis[x]==dis[y]) dis[v]=(dis[v]+1)%2;}}}cout<<m<<endl;return 0;
}

Luo1221 奇偶数相关推荐

  1. 1119: 零起点学算法26——判断奇偶数

    1119: 零起点学算法26--判断奇偶数 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lld Submitted: 2419 ...

  2. 【Scratch】青少年蓝桥杯_每日一题_6.17_奇偶数

    用心写好每一篇文章 效果图 一.题目背景 本题是Scratch编程问题,出现在2020年4月的线上省赛模拟考试中. 二.编程实现 小猫正在学习奇偶数,它从1-1000之间随机取一个数,并且可以正确判断 ...

  3. LeetCode 多线程 1116. 打印零与奇偶数

    1116. 打印零与奇偶数 Ideas 有几个线程就用几个信号量,最先开始的信号量初始化为1,其它初始化为0,然后根据条件判断实现同步. 多线程的问题好多都是:锁自己,解锁别人. Code from ...

  4. 线程打印_面试题:用程序实现两个线程交替打印 0~100 的奇偶数

    作者:dadiyang来源:https://blog.csdn.net/dadiyang/article/details/88315124 面试场景 面试官:Java多线程了解吗?你给我写一下,起两个 ...

  5. [编程启蒙游戏] 2. 奇偶数

    文章目录 1. 游戏前提 2. 游戏目的 3. python代码 1. 游戏前提 孩子知道奇偶数是什么,不知道也没关系 还可以采用掰手指演示,伸出两个手指能配对,所有伸出来的手指都两两配对了,伸出来的 ...

  6. c语言利用线程交替打印奇偶数,两个线程交替打印奇偶数

    序言 以前看过多线程交替打印奇偶数,知道大概怎么写,实际写的时候会卡住,特此记录下来 方法一:wait, notify,性能较差,不推荐使用 public class TestThread { pub ...

  7. 【电子学会】2019年12月图形化三级 -- 判断奇偶数

    判断奇偶数 1. 准备工作 (1)导入角色Cat Flying.Apple.Bananas: (2)保留白色背景. 2. 功能实现 (1)点击绿旗,Cat Flying询问"请输入一个正整数 ...

  8. update 追加某个字段的内容和mysql数据库怎么判断查奇偶数

    1.update 追加某个字段的内容 update 表名 set 字段名 = concat(字段名,"string") UPDATE daysky SET jianyao=CONC ...

  9. linux c判断奇偶数据,c语言怎么判断奇偶数

    c语言怎么判断奇偶数? 第一步:首先先打开我们的DEV C++软件,然后点击"新建源代码". 推荐:<C语言教程> 第二步:在我们的编辑页面输入以下代码:#includ ...

最新文章

  1. kafka:一文读懂消费者背后的那点猫腻
  2. java maven 读写pdf_java读取pdf内容
  3. Synchronized、偏向锁、自旋锁、轻量级锁以及锁的升级过程
  4. 51cto博客程序错误
  5. Linux:Swap分区
  6. ASP.NET Core 单元测试:如何 Mock HttpContext.Features.Get()
  7. 使用IndexReader.repen提高搜索速度
  8. WinXP下替代IIS的新思路
  9. 【多线程】线程的生命周期
  10. Linux系统下select的使用方式
  11. 如何将Oracle中同一列的多行记录拼接成一个字符串 十一__262 | 浏览 8183 次 推荐于2016-01-25 17:34:18 最佳答案 需要用wm_concat函数来实现。
  12. 基于协同过滤,NMF和Baseline的推荐算法
  13. ibm arm-linux,CentOS Linux 7.5 (build 1804) 现可用于IBM POWER9体系结构
  14. VMWare ESXi thin磁盘空间回收,精简置备空间回收
  15. Matlab版本svm工具箱,matlab libsvm工具箱
  16. 关于RPY角的旋转顺序问题
  17. 查词根词缀特别好的网站
  18. Reacte路由报错:A <Route> is only ever to be used as the child of <Routes> element, never rendered direct
  19. OSChina 周日乱弹 —— 你撞鬼了吗?
  20. 市面上有哪些免费堡垒机品牌?好用吗?

热门文章

  1. Java11新特性(二)——JDK11绿色免安装版环境变量配置教程
  2. 【转贴】麻省理工教授箴言:怎样做研究生!
  3. 启动运行.launch报错[robot_launch.launch] is neither a launch file in package nor is a launch file name
  4. sersync+rsync 部署
  5. 2019年让程序员崩溃的 60 个瞬间,笑死我了
  6. Andorid中.9.png图片的使用及制作
  7. Android基础学习(二)—— 常用控件
  8. 用计算机打出我爱祖国,02316计算机应用技术 全国2013年7月自考 试题
  9. python版记事本
  10. 为什么工程师要了解业务?