AcWing239. 奇偶游戏

简介: 笔记

AcWing239. 奇偶游戏


思路

5.png


小A和小B在玩一个游戏。


首先,小A写了一个由0和1组成的序列S,长度为N。


然后,小B向小A提出了M个问题。


在每个问题中,小B指定两个数 l 和 r,小A回答 S[l~r] 中有奇数个1还是偶数个1。


机智的小B发现小A有可能在撒谎。


例如,小A曾经回答过 S[1~3] 中有奇数个1, S[4~6] 中有偶数个1,现在又回答 S[1~6] 中有偶数个1,显然这是自相矛盾的。


请你帮助小B检查这M个答案,并指出在至少多少个回答之后可以确定小A一定在撒谎。


即求出一个最小的k,使得01序列S满足第1 ~ k个回答,但不满足第1~k+1个回答。


输入格式

第一行包含一个整数N,表示01序列长度。


第二行包含一个整数M,表示问题数量。


接下来M行,每行包含一组问答:两个整数l和r,以及回答“even”或“odd”,用以描述S[l~r] 中有偶数个1还是奇数个1。


输出格式

输出一个整数k,表示01序列满足第1k个回答,但不满足第1k+1个回答,如果01序列满足所有回答,则输出问题总数量。


数据范围

N≤109,M≤10000


代码

#include<iostream>
#include<cstdio>
#include<queue>
#include<string>
#include<cstring>
#include<map>
#include<vector>
#include<set>
#include<stack>
#include<algorithm>
#include<vector>
#include<utility>
#include<deque>
#include<unordered_map>
#define INF 0x3f3f3f3f
#define mod 1000000007
#define endl '\n'
#define eps 1e-6
inline int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
inline int lowbit(int x) { return x & -x; }
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
const int N = 20050;
unordered_map<int, int>s;
int n, m;
int p[N], d[N];
int get(int x) {
  if (s.count(x) == 0)s[x] = ++n;
  return s[x];
}
int Find(int x) {
  if (x != p[x]) {
    int root = Find(p[x]);
    d[x] ^= d[p[x]];
    p[x] = root;
  }
  return p[x];
}
int main() {
  cin >> n >> m;
  n = 0;
  for (int i = 1;i < N;++i)p[i] = i;
  int res = m;
  for (int i = 1;i <= m;++i) {
    int a, b;
    string op;
    cin >> a >> b >> op;
    a = get(a - 1), b = get(b);
    int t = 0; //偶数
    if (op == "odd")t = 1; //奇数
    int pa = Find(a), pb = Find(b);
    if (pa == pb) {
      if ((d[a] ^ d[b]) != t) {
        res = i - 1;
        break;
      }
    }
    else {
      p[pa] = pb;
      d[pa] = d[a] ^ d[b] ^ t;
    }
  }
  cout << res << endl;
}


目录
相关文章
|
安全 前端开发 PHP
[PiKaChu靶场通关]文件包含file include
[PiKaChu靶场通关]文件包含file include
967 0
[PiKaChu靶场通关]文件包含file include
|
Ubuntu
Ubuntu系统安装gtest
Ubuntu系统安装gtest
649 0
|
缓存 安全 SoC
来看看ARM gicv2/gicv3的详解
来看看ARM gicv2/gicv3的详解
1193 0
|
Ubuntu
ubuntu 22.04 阿里源
ubuntu 22.04 阿里源
12871 0
|
Ubuntu Python
Ubuntu安装pip并切换国内源
Ubuntu安装pip并切换国内源
4149 0
Ubuntu安装pip并切换国内源
|
存储 Java 测试技术
阿里巴巴java开发手册
这篇文章是关于阿里巴巴Java开发手册的整理,内容包括编程规约、异常日志、单元测试、安全规约、MySQL数据库使用以及工程结构等方面的详细规范和建议,旨在帮助开发者编写更加规范、高效和安全的代码。
|
机器学习/深度学习 人工智能 算法
秒懂算法 │ 四边形不等式优化
四边形不等式DP优化涉及的证明比较复杂,如果先给出定义和证明会让人迷惑,所以本文的组织结构是:先给出应用场景,引导出四边形不等式的概念,再进行定义和证明,最后用例题巩固。 四边形不等式DP优化,虽然理论有点复杂,但是编码很简单。
383 0
秒懂算法 │ 四边形不等式优化
vscode 格式化使用Tab缩进4个制表符
vscode 格式化使用Tab缩进4个制表符
1002 0
|
测试技术 Python
PTA 1018 锤子剪刀布 (20 分)
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示
249 0