【题解】CF1290B Irreducible Anagrams
题目大意:对于一个字符串,每次询问一个区间,看看这个区间是不是可以划分为若干区间,这些区间内数字经过排列后可以还原原来区间。
\(\text{Solution:}\)
菜鸡笔者字符串构造该好好练练了……
考虑基本情况:
- 当区间长度为\(1\)的时候一定可行。这个不用证明吧。
- 当区间左右端点不同时,一定可行。构造方法:令最右边与最左边相互交换即可。
- 当区间不满足前两个性质并且颜色数大于\(2\)的时候一定可行。
证明性质三:
因为不满足性质\(1,2\)我们可以设它的左右端点颜色都是\(x\).那么,因为有至少三种颜色,我令一部分放到最开头,一部分放在最末尾,使得\(x\)对应的左右开头必须相连覆盖整个区间即可。
如果只有两种颜色的话,区间端点颜色为\(x.\)那么我们如果令另一种颜色覆盖两头,则一定可以在这两个端点重新排列后的位置中间找到一个点分开使得区间不符合条件。
以上就是所有情况了。至于颜色数,闲的没事可以线段树维护状压后的颜色,当然我们直接前缀和维护就行了。
#include<bits/stdc++.h>
using namespace std;
int q,l,r,L;
char s[200010];
int sum[200010][50];
int main(){
cin>>(s+1);
L=strlen(s+1);
for(int i=1;i<=L;++i)s[i]-='a';
for(int i=1;i<=L;++i){
for(int j=0;j<26;++j)sum[i][j]=sum[i-1][j];
sum[i][s[i]]++;
}
scanf("%d",&q);
while(q--){
vector<int>c;
scanf("%d%d",&l,&r);
if(l==r){
puts("Yes");
continue;
}
if(s[l]!=s[r]){
puts("Yes");
continue;
}
int tot=0;
for(int i=0;i<26;++i){
tot+=((sum[r][i]-sum[l-1][i])>0?1:0);
if(sum[r][i]-sum[l-1][i]==0)continue;
c.push_back(sum[r][i]-sum[l-1][i]);
}
//cout<<tot<<endl;
if(tot>2)puts("Yes");
else puts("No");
}
return 0;
}
【题解】CF1290B Irreducible Anagrams的更多相关文章
- B. Irreducible Anagrams【CF 1290B】
思路: 设tx为t类别字符的个数. ①对于长度小于2的t明显是"YES"②对于字符类别只有1个的t明显是"YES"③对于字符类别有2个的t,如左上图:如果str ...
- CF-1291 D - Irreducible Anagrams
D. Irreducible Anagrams 题意 若两个字符串中每个字符的个数都是一样的,则称他们互为\(anagrams\).现在定义两个字符串s,t是\(reducible~anagram\) ...
- Codeforces 1290B/1291D - Irreducible Anagrams
题目大意: 两串字符串 s 和 t 是否 anagrams(下文简称ANA) 的定义是: 是否能将 s 内的字母打乱顺序后再拼接得到 t 我们考虑互相ANA的两串字符串 s 和 t 我们称 t 是 s ...
- 2021record
2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...
- C#版 - Leetcode49 - 字母异位词分组 - 题解
C#版 - Leetcode49 - 字母异位词分组 - 题解 Leetcode49.Group Anagrams 在线提交: https://leetcode.com/problems/group- ...
- 算法与数据结构基础 - 哈希表(Hash Table)
Hash Table基础 哈希表(Hash Table)是常用的数据结构,其运用哈希函数(hash function)实现映射,内部使用开放定址.拉链法等方式解决哈希冲突,使得读写时间复杂度平均为O( ...
- [LeetCode 题解]: Anagrams
Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...
- [LeetCode]题解(python):049-Groups Anagrams
题目来源 https://leetcode.com/problems/anagrams/ Given an array of strings, group anagrams together. For ...
- [LeetCode]题解(python):049-Group Anagrams
题目来源: https://leetcode.com/problems/anagrams/ 题意分析: 给定一个字符串数组,将用相同字母(包括个数)组成的字符串放到一起.比如["eat&qu ...
随机推荐
- 一文吃透redis持久化,妈妈再也不担心我面试过不了!
持久化介绍 redis 提供了两种方式方式进行数据的持久化(将数据存储到硬盘中):第一种称为快照(snapshotting)RDB,它将某一时刻的所有数据都写入硬盘,所以快照是一次全量备份,并且存储的 ...
- java初探(1)之登录终探
上一章讲了表单验证,数据验证和加密.这一章,将研究服务器和数据库的交互过程. 后端服务器有两种主流的形式,SQL数据库和NOSQL数据库.其中MYSQL属于SQL数据库,REDIS属于非SQL数据库. ...
- Codeforces1365
AC代码 A. Matrix Game 对于给定矩阵,剩余可用的位置的数目是确定的,根据奇偶性判断就完事了. B. Trouble Sort 如果数组\(b\)有0有1,那么Yes.否则只有数组\(a ...
- Jogl2.0 jogamp-all-platforms 在eclipse 中的配置
我的电脑在win8 64位系统,搞了好久,网上的方法都快试了个遍,官网的试了,都不行,目前成功了,希望可以帮助其他同学. 1.首先去这里http://jogamp.org/deployment/jog ...
- stack 数据结构
栈定义 栈:后进先出(永远从栈顶取元素)LIFO last-in-first-out 栈实现 class Stack { constructor() { this.items = [] this. ...
- Git 实用操作:重写 Commit 历史
当我们修改完代码,提交了一个 commit,然后发现改错了,怎么修正?下面分两种情况来讨论:修正最近一次提交,和修正历史多个提交. 修正最近一次提交 如果发现刚刚提交的内容有错误,当场再修改一下再提交 ...
- 尤雨溪:TypeScript不会取代JavaScript
来源 |evrone.com译者 | 核子可乐策划 | 蔡芳芳 近日,Evrone 与 Vue.js 的作者尤雨溪进行了一次访谈,了解他对于无后端与全栈方法.以及 Vue.js 适用场景的看法,还有他 ...
- Dos拒绝服务Sockstress/TearDrop 泪滴攻击(二)
Sockstress放大攻击原理:攻击者向目标发送一个很小的流量,但是会造成产生的攻击流量是一个巨大的.成百上千倍上万倍流量被放大的一个效果,才适合作为一个拒绝服务攻击效果.(实现攻击者很小的流量打垮 ...
- [LeetCode] 22. 括号生成(回溯/DP)
题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()( ...
- ASP.NET Core 配置与获取
目录 1,来自字典 2,来自配置文件 3,层次结构 4,映射 ASP.NET Core 中,可以使用 ConfigurationBuilder 对象来构建. 主要分为三部:配置数据源 -> Co ...