acwing吧_acwing算法基础

acwing吧_acwing算法基础小 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 个答案,并指出在至少多少个回答之后可

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

小 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 序列满足第 1∼k 个回答,但不满足第 1∼k+1 个回答,如果 01 序列满足所有回答,则输出问题总数量。

数据范围
N≤109,M≤10000

输入样例:
10
5
1 2 even
3 4 odd
5 6 even
1 6 even
7 10 odd
输出样例:
3
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int f[N],d[N];
unordered_map<int,int>m;
int ctx;
int Find(int x){ 
   
    if(x != f[x]){ 
   
        int t = f[x];
        f[x] = Find(f[x]);
        d[x] = (d[x] + d[t]);
    }
    return f[x];
}
int get(int x){ 
   
    if(m.count(x) == 0)m[x] = ++ ctx;
    return m[x];
}
int main(){ 
   
    int n;
    string type;
    cin>>n>>n;
    int x,y;
    int res = 0;
    for(int i = 0;i < N;i ++)f[i] = i,d[i] = 0;
    for(int i = 1;i <= n;i ++){ 
   
        cin>>x>>y>>type;
        x = get(x - 1),y = get(y);
        int a = Find(x),b = Find(y);
        if(type == "even"){ 
   
            if(a == b && abs(d[x] - d[y]) % 2 && !res)res = i;
            else{ 
   
                f[a] = b;
                d[a] = (d[y] - d[x]) % 2;
            }
        }
        else{ 
   
            if(a == b && (abs(d[x] - d[y] - 1) % 2) == 1 && !res){ 
   
                res = i;
            }
            else{ 
   
                f[a] = b;
                d[a] = (1 + d[y] - d[x]) % 2;
            }
        }
    }
    if(res > 0)cout<<res - 1<<endl;
    else cout<<n<<endl;
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169102.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月10日 下午9:16
下一篇 2022年8月10日 下午9:16


相关推荐

  • 2021win7激活码-激活码分享

    (2021win7激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlMLZPB5EL5Q-eyJsaWNlbnNlSW…

    2022年3月21日
    63
  • php删除数组中指定的元素,php如何删除数组中指定的元素?

    php删除数组中指定的元素,php如何删除数组中指定的元素?php删除数组中指定元素的方法:1、使用【array_splice()】函数删除,代码为【$key=array_search(3,$arr1)】;2、使用【unset()】函数删除,代码为【unset($arr2[$key])】。php删除数组中指定元素的方法:方法一,使用array_splice()删除:代码如下:…

    2022年8月10日
    8
  • linux c编程获取excel文件内容,c读取excel文件内容

    linux c编程获取excel文件内容,c读取excel文件内容如何用 C 语言实现读取 excel 文件中的数据呢 要做的是在 Linux 环境下使用 C 语言实现快速读取 excel 文件并保存成文本格式基本思路基础实现方法同上篇文章 直接通过 ODBC 读 写 Excel 表格文件 相同 都是通过 ODBC 来把 Excel 表格文件当成数据库文件来进行读 写等操作 所以在 Excel 表格文件中写入的行头名必须是唯一的 不要重名 相当于数据库中的 ID 值 C 语言读取 excel 文件的数据现在

    2026年3月26日
    2
  • HarmonyOS与Android的全面对比

    HarmonyOS与Android的全面对比目录一、前言二、HarmonyOS与Android的对比2.1HarmonyOS并不是Android的替代品2.2系统定位2.3内核对比2.4运行速度三、方舟编译器一、前言这段时间我在寻思这学习一下鸿蒙,第一是因为在着手做一个自己的开源项目,技术选型的时候想到了鸿蒙;第二是我个人非常看好鸿蒙系统的未来,清除明白华为和一些民族企业担负的责任和国人的期待,虽然带着一些民族感情;鸿蒙刚发布的时候自己是非常激动的,但是后来项目太忙一直没有认真的去了解过,这次打算花一部

    2022年6月5日
    92
  • OpenClaw 雲端部署 vs 本地部署:5 大維度完全對比指南

    OpenClaw 雲端部署 vs 本地部署:5 大維度完全對比指南

    2026年3月13日
    2
  • windows下安装emscripten python下载安装

    windows下安装emscripten python下载安装目录1.在电脑上安装配置好git和python2.新建个文件夹,用于放置emscripten3.在文件夹中,右键,gitbashhere4.从git上克隆出emscripten5.进入下载完的emsdk文件夹6.下载完查看是否更新emsdk7.安装最新的emsdk并配置全局的环境变量8.如果上一步安装成功,激活9.应用环境变量10.检验是否安装成功…

    2025年6月9日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号