Luo1221 奇偶数
题目描述
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 奇偶数相关推荐
- 1119: 零起点学算法26——判断奇偶数
1119: 零起点学算法26--判断奇偶数 Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lld Submitted: 2419 ...
- 【Scratch】青少年蓝桥杯_每日一题_6.17_奇偶数
用心写好每一篇文章 效果图 一.题目背景 本题是Scratch编程问题,出现在2020年4月的线上省赛模拟考试中. 二.编程实现 小猫正在学习奇偶数,它从1-1000之间随机取一个数,并且可以正确判断 ...
- LeetCode 多线程 1116. 打印零与奇偶数
1116. 打印零与奇偶数 Ideas 有几个线程就用几个信号量,最先开始的信号量初始化为1,其它初始化为0,然后根据条件判断实现同步. 多线程的问题好多都是:锁自己,解锁别人. Code from ...
- 线程打印_面试题:用程序实现两个线程交替打印 0~100 的奇偶数
作者:dadiyang来源:https://blog.csdn.net/dadiyang/article/details/88315124 面试场景 面试官:Java多线程了解吗?你给我写一下,起两个 ...
- [编程启蒙游戏] 2. 奇偶数
文章目录 1. 游戏前提 2. 游戏目的 3. python代码 1. 游戏前提 孩子知道奇偶数是什么,不知道也没关系 还可以采用掰手指演示,伸出两个手指能配对,所有伸出来的手指都两两配对了,伸出来的 ...
- c语言利用线程交替打印奇偶数,两个线程交替打印奇偶数
序言 以前看过多线程交替打印奇偶数,知道大概怎么写,实际写的时候会卡住,特此记录下来 方法一:wait, notify,性能较差,不推荐使用 public class TestThread { pub ...
- 【电子学会】2019年12月图形化三级 -- 判断奇偶数
判断奇偶数 1. 准备工作 (1)导入角色Cat Flying.Apple.Bananas: (2)保留白色背景. 2. 功能实现 (1)点击绿旗,Cat Flying询问"请输入一个正整数 ...
- update 追加某个字段的内容和mysql数据库怎么判断查奇偶数
1.update 追加某个字段的内容 update 表名 set 字段名 = concat(字段名,"string") UPDATE daysky SET jianyao=CONC ...
- linux c判断奇偶数据,c语言怎么判断奇偶数
c语言怎么判断奇偶数? 第一步:首先先打开我们的DEV C++软件,然后点击"新建源代码". 推荐:<C语言教程> 第二步:在我们的编辑页面输入以下代码:#includ ...
最新文章
- kafka:一文读懂消费者背后的那点猫腻
- java maven 读写pdf_java读取pdf内容
- Synchronized、偏向锁、自旋锁、轻量级锁以及锁的升级过程
- 51cto博客程序错误
- Linux:Swap分区
- ASP.NET Core 单元测试:如何 Mock HttpContext.Features.Get()
- 使用IndexReader.repen提高搜索速度
- WinXP下替代IIS的新思路
- 【多线程】线程的生命周期
- Linux系统下select的使用方式
- 如何将Oracle中同一列的多行记录拼接成一个字符串 十一__262 | 浏览 8183 次 推荐于2016-01-25 17:34:18 最佳答案 需要用wm_concat函数来实现。
- 基于协同过滤,NMF和Baseline的推荐算法
- ibm arm-linux,CentOS Linux 7.5 (build 1804) 现可用于IBM POWER9体系结构
- VMWare ESXi thin磁盘空间回收,精简置备空间回收
- Matlab版本svm工具箱,matlab libsvm工具箱
- 关于RPY角的旋转顺序问题
- 查词根词缀特别好的网站
- Reacte路由报错:A <Route> is only ever to be used as the child of <Routes> element, never rendered direct
- OSChina 周日乱弹 —— 你撞鬼了吗?
- 市面上有哪些免费堡垒机品牌?好用吗?
热门文章
- Java11新特性(二)——JDK11绿色免安装版环境变量配置教程
- 【转贴】麻省理工教授箴言:怎样做研究生!
- 启动运行.launch报错[robot_launch.launch] is neither a launch file in package nor is a launch file name
- sersync+rsync 部署
- 2019年让程序员崩溃的 60 个瞬间,笑死我了
- Andorid中.9.png图片的使用及制作
- Android基础学习(二)—— 常用控件
- 用计算机打出我爱祖国,02316计算机应用技术 全国2013年7月自考 试题
- python版记事本
- 为什么工程师要了解业务?