当前位置: 首页 > news >正文

C. Binary String Copying - 思维

 

 分析:

        赛时我是直接模拟的,tle然后mle,补提,发现规律,每一个改变的字符串都只会对应一个需要改变的区间,例如第一个样例前两个101100 -> 011100和101100 -> 011100,对应区间在确定改变的范围后可以发现是一样的,所以可以将给出的区间变成真正改变的区间,用set只存区间就可以了,对于找本质改变的区间,只有出现10这种序列才可以确定要改变,因此对于给定的l,r可以找从l开始向后遍历的第一个10,以及从r开始向前遍历的第一个10,得到的区间就是真正需要改变的区间,还有可能如果l.>r的时候,区间不存在,那么表示s本身,没有改变,也算一种新的字符串,也要存下来。

代码:

#include <bits/stdc++.h>using namespace std;
using ll = long long;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int T;cin >> T;while(T --){int n, m;cin >> n >> m;string s;cin >> s;s = " " + s;vector<int> l(n + 2, -1), r(n + 2, n + 2);for(int i = 1; i <= n; i ++) {l[i] = l[i - 1];if(s[i] == '0') l[i] = i;}for(int i = n; i >= 1; i --) {r[i] = r[i + 1];if(s[i] == '1') r[i] = i;}set<pair<int, int>> ans;while(m --) {int a, b;cin >> a >> b;if(r[a] <= l[b]) ans.insert({r[a], l[b]});else ans.insert({-1, -1});}cout << ans.size() << '\n';}
}

http://www.lryc.cn/news/105080.html

相关文章:

  • 哈工大计算机网络课程网络安全基本原理详解之:密钥分发中心与公钥认证中心
  • md5sum
  • 图文档数字化:实现高效管理的几大步骤
  • 服务器磁盘占用过高分析
  • 【C语言】通讯录3.0 (文件存储版)
  • 【C#常用操作】
  • 深入理解CountDownLatch计数器
  • 从SQL注入绕过最新安全狗WAF中学习fuzz
  • C语言每日一题:12《数据结构》相交链表。
  • 【Spring框架】SpringMVC
  • HDFS中namenode安全模式
  • blender凹凸感和置换形变
  • 力扣 343. 整数拆分
  • 【JavaWeb】正则表达式
  • Vue中常用到的标签和指令
  • C++设计模式之访问者模式
  • Java8的stream常用的操作
  • 传统计算机视觉
  • 13-3_Qt 5.9 C++开发指南_基于QReadWriteLock 的线程同步
  • opencv04-掩膜
  • python解析帆软cpt及frm文件(xml)获取源数据表及下游依赖表
  • TypeScript
  • 解决启动vue前端报错:npm ERR! Missing script: “serve“
  • 数据结构 | 线性数据结构——列表
  • 【ARM 常见汇编指令学习 6 - bic(位清除), orr(位或), eor(异或)】
  • 在CSDN学Golang场景化解决方案(EFK分布式日志系统方案)
  • MySQL篇
  • 图数据库Neo4j学习四——Spring Data NEO
  • UE虚幻引擎 UTextBlock UMG文本控件超过边界区域以后显示省略号
  • Spring Boot实践五 --异步任务线程池