CF-1291 D - Irreducible Anagrams
D. Irreducible Anagrams
题意
若两个字符串中每个字符的个数都是一样的,则称他们互为\(anagrams\)。现在定义两个字符串s,t是\(reducible~anagram\)的,必须满足下面的条件:
- 将s、t两个字符串分别拆成k(k>=2)个连续子串
- \(s_1,s_2\cdots s_k\) 按顺序排列构成s
- \(t_1,t_2\cdots t_k\) 按顺序排列构成t
- \(\forall i \in [1,k],都有s_i 是 t_i 的anagrams\)
现在给了一个字符串,每次询问它的一个字串是否存在一个\(irreducible~anagram\)(请注意这些概念必须是以s是t的\(anagrams\)前提下进行的)
分析
对于每个询问的字符串s,是否存在一个字符串t,使得t是s的\(irreducible~anagram\).分析题目条件可以将问题转换为:在t和s的任意等长前缀中,它们的字符集的个数必须是不同的(也就是确保它们不是\(anagrams\))
我们声明满足下面条件的字符串存在\(irreducible~anagram\)
- 长度等于1
- 首字符和尾字符不同
- 字符串包含至少三种不同的字符
求证这些条件后,利用前缀和的技巧可以很容易的解决本题。下面试证一下:
- 长度等于1,那么就无法找到一个 k(k>=2) ,所以它的\(irreducible~anagram\)就是它本身
- \(s[1] \neq s[n]\) 即首字符和尾字符不同,我们可以尽量靠前的将所有同\(s[n]\)一样的字符写在前面。然后剩下的字符随便放置即可。可以想到对于任意的\(k\in[1,n-1]\),都满足\(s[1..k]\)与\(t[1..k]\)的字符集不同。
- 字符串包含至少三种不同的字符,并且\(s[1] = s[n]\)。可以找到一个最大的\(j\)满足\(s[j]\neq s[n]\)。可以把所以同\(s[j]\)一样的字符放到最前面,然后紧挨着中间放置所有同\(s[n]\)的字符,因为不同字符个数大于等于3,所以现在最后面肯定还有空位,将剩余的字符随意放置在最后面即可。可以想到构成的这样的一个串,一定满足任意前缀字符集不等。
到此为止就可以放心做题了,但试图证明一下为何\(s[1] = s[n]~~and~~不同字符个数等于2\)的情况为何找不到。
假设字符只有a和b两种,而且\(s[1]=s[n]=a\),那么我们构造出来的串必须满足任意前缀中\(b\)的个数,都大于\(s\)对应前缀中b的个数。那么考虑\(s\)中最后出现\(b\)的位置\(x\),可以想到\(s[1..x-1]\)前缀比\(t[1..x-1]\)少一个\(b\),而\(s[x]=b\)得出现使得\(t[x]\)必须再放置一个\(b\),这样才能满足任意前缀中b得个数都要比s多,但此时已经没有\(b\)可以放了(因为\(s[1..x-1]\)就已经多放了一个b)所以在\(x\)这个位置,无法构造。
const int N = 200010 + 5;
char s[N];
int n, sum[N][26], q, l, r, cnt[26];
int main() {
scanf("%s", s+1);
n = strlen(s + 1);
for (int i = 1; i <= n;i++){
memcpy(sum[i], sum[i - 1], sizeof sum[i]);
sum[i][s[i] - 'a']++;
}
scanf("%d", &q);
while(q--){
scanf("%d%d", &l, &r);
if(r - l == 0){
puts("YES");
continue;
}
int x = 0;
for (int i = 0; i < 26;i++){
cnt[i] = sum[r][i] - sum[l - 1][i];
if(cnt[i])
x++;
}
if(s[l] == s[r] && x <= 2){
puts("NO");
}else
puts("YES");
}
return 0;
}
CF-1291 D - Irreducible Anagrams的更多相关文章
- B. Irreducible Anagrams【CF 1290B】
思路: 设tx为t类别字符的个数. ①对于长度小于2的t明显是"YES"②对于字符类别只有1个的t明显是"YES"③对于字符类别有2个的t,如左上图:如果str ...
- Codeforces 1290B/1291D - Irreducible Anagrams
题目大意: 两串字符串 s 和 t 是否 anagrams(下文简称ANA) 的定义是: 是否能将 s 内的字母打乱顺序后再拼接得到 t 我们考虑互相ANA的两串字符串 s 和 t 我们称 t 是 s ...
- cf D. Sereja ans Anagrams
http://codeforces.com/contest/368/problem/D #include <cstdio> #include <cstring> #includ ...
- 【题解】CF1290B Irreducible Anagrams
Link 题目大意:对于一个字符串,每次询问一个区间,看看这个区间是不是可以划分为若干区间,这些区间内数字经过排列后可以还原原来区间. \(\text{Solution:}\) 菜鸡笔者字符串构造该好 ...
- 2021record
2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...
- CF 题目选做
写省选的题目对noip没什么大用 关键是 细节题或者是思考题比较重要 练思维自然是CF比较好了 把我见到的比较好的CF题放上来刷一刷. LINK:Complete the projects 就是说一个 ...
- C语言 · Anagrams问题
问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear"和"Nuclear ...
- ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'
凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...
- [LeetCode] Find All Anagrams in a String 找出字符串中所有的变位词
Given a string s and a non-empty string p, find all the start indices of p's anagrams in s. Strings ...
随机推荐
- jxl解析多个excel工作表-java代码
@Override public ResultBean txImportDqKpi(String filePath) { ResultBean rb = new ResultBean(); int s ...
- 大厂面试官竟然这么爱问Kafka,一连八个Kafka问题把我问蒙了?
本文首发于公众号:五分钟学大数据 在面试的时候,发现很多面试官特别爱问Kafka相关的问题,这也不难理解,谁让Kafka是大数据领域中消息队列的唯一王者,单机十万级别的吞吐量,毫秒级别的延迟,这种天生 ...
- python安装whl包时出现的问题解决:is not a supported wheel on this platform
@ 目录 一.问题 二.查找问题 三.问题解决 一.问题 1.下载一个twisted包 安装Twisted,进入https://www.lfd.uci.edu/~gohlke/pythonlibs 下 ...
- 直播预告:Quadro RTX显卡助力Twinmotion在建筑表现领域火力全开
新年伊始,泛CG继续起航! 2021年首期泛CG分享会 我们邀请了两位业界大咖一起分享 NVIDIA GPU实时渲染在建筑可视化领域的应用 新的一年,继续相约! 1.嘉宾介绍 魏老师从事设计可视化工作 ...
- Azure Terraform(五)利用Azure DevOps 实现自动化部署基础资源
一,引言 上一篇我们结合学习 Azure Traffic Manger 的内容,做了一个负载均衡的基础设施架构.通过 Terraform 部署执行计划,将整个 Azure Traffic Manage ...
- 【EXP】exp-00091解决办法
如果遇到exp的话一般都是因为字符集的问题 解决办法: 1.在oracle中查看数据库的字符集 SQL> select userenv('language') from dual; USEREN ...
- kubernets之存活探针
一 存活探针存在的意义 1.1 kubernet通过存活探针(liveness probe)检查容器是否还在运行,可以为pod中的每个容器单独指定存活探针,如果探针执行失败,kubernets会 ...
- ctfhub技能树—sql注入—过滤空格
手注 查询数据库 -1/**/union/**/select/**/database(),2 查询表名 -1/**/union/**/select/**/group_concat(table_name ...
- kubernetes之为每个命名空间的pod设置默认的requests以及limits
一 为啥需要为命名空间里面添加pod添加默认的requests和limits? 通过前面的学习我们已经知道,如果节点上面的pod没有设置requests和limits,这些容器就会受那些设置了的控制 ...
- CALL TRANSACTION 使用说明
以调用事务VA03为例: 在程序中添加如下代码就可以实现 SET PARAMETER ID 'AUN' FIELD var. CALL TRANSACTION 'VA03' AND SKIP FIR ...