D. Irreducible Anagrams

题意

若两个字符串中每个字符的个数都是一样的,则称他们互为\(anagrams\)。现在定义两个字符串s,t是\(reducible~anagram\)的,必须满足下面的条件:

  1. 将s、t两个字符串分别拆成k(k>=2)个连续子串
  2. \(s_1,s_2\cdots s_k\) 按顺序排列构成s
  3. \(t_1,t_2\cdots t_k\) 按顺序排列构成t
  4. \(\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
  2. 首字符和尾字符不同
  3. 字符串包含至少三种不同的字符

求证这些条件后,利用前缀和的技巧可以很容易的解决本题。下面试证一下:

  1. 长度等于1,那么就无法找到一个 k(k>=2) ,所以它的\(irreducible~anagram\)就是它本身
  2. \(s[1] \neq s[n]\) 即首字符和尾字符不同,我们可以尽量靠前的将所有同\(s[n]\)一样的字符写在前面。然后剩下的字符随便放置即可。可以想到对于任意的\(k\in[1,n-1]\),都满足\(s[1..k]\)与\(t[1..k]\)的字符集不同。
  3. 字符串包含至少三种不同的字符,并且\(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的更多相关文章

  1. B. Irreducible Anagrams【CF 1290B】

    思路: 设tx为t类别字符的个数. ①对于长度小于2的t明显是"YES"②对于字符类别只有1个的t明显是"YES"③对于字符类别有2个的t,如左上图:如果str ...

  2. Codeforces 1290B/1291D - Irreducible Anagrams

    题目大意: 两串字符串 s 和 t 是否 anagrams(下文简称ANA) 的定义是: 是否能将 s 内的字母打乱顺序后再拼接得到 t 我们考虑互相ANA的两串字符串 s 和 t 我们称 t 是 s ...

  3. cf D. Sereja ans Anagrams

    http://codeforces.com/contest/368/problem/D #include <cstdio> #include <cstring> #includ ...

  4. 【题解】CF1290B Irreducible Anagrams

    Link 题目大意:对于一个字符串,每次询问一个区间,看看这个区间是不是可以划分为若干区间,这些区间内数字经过排列后可以还原原来区间. \(\text{Solution:}\) 菜鸡笔者字符串构造该好 ...

  5. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  6. CF 题目选做

    写省选的题目对noip没什么大用 关键是 细节题或者是思考题比较重要 练思维自然是CF比较好了 把我见到的比较好的CF题放上来刷一刷. LINK:Complete the projects 就是说一个 ...

  7. C语言 · Anagrams问题

    问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear"和"Nuclear ...

  8. 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 ...

  9. [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 ...

随机推荐

  1. 软件性能测试分析与调优实践之路-Web中间件的性能分析与调优总结

    本文主要阐述软件性能测试中的一些调优思想和技术,节选自作者新书<软件性能测试分析与调优实践之路>部分章节归纳. 在国内互联网公司中,Web中间件用的最多的就是Apache和Nginx这两款 ...

  2. 树莓派-4WD智能小车操作小结

    树莓派-4WD智能小车操作小结 树莓派4B-4WD智能小车,双层结构,第一层结构为:小车扩展板(底层)+树莓派主板,通过铜柱隔离固定,小车扩展板相当于计算机的外设扩展板:上面一层为第二层,是三个舵机承 ...

  3. 【Java基础】Java10 新特性

    Java10 新特性 局部变量类型推断 局部变量的显示类型声明,常常被认为是不必须的. 场景一:类实例化时.在声明一个变量时,总是习惯了敲打两次变量类型,第一次用于声明变量类型,第二次用于构造器. 场 ...

  4. 基于JavaFX实现的音乐播放器

    前言 这个是本科四年的毕业设计,我个人自命题的一个音乐播放器的设计与实现,其实也存在一些功能还没完全开发完成,但粗略的答辩也就过去了,还让我拿了个优秀,好开心.界面UI是参考网易云UWP版本的,即使这 ...

  5. selenium自动化 | 借助百度AI开放平台识别验证码登录职教云

    #通过借助百度AI开放平台识别验证码登录职教云 from PIL import Image from aip import AipOcr import unittest # driver.get(zj ...

  6. ClickHouse安装使用(单机、集群、高可用)

    Clickhouse版本:20.3.6.40-2 安装包地址:https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/ 一.单机版 1.安装依赖 yum ...

  7. 记汉化zabbix后图形界面没有任何汉字的问题

    1.安装并汉化后zabbix,所有的图形界面都没有任何字图,如下图 2.郁闷不已,去/var/www/html/zabbix/fonts目录下面查看,发现之前上传字体的文件名后缀是.ttc,猜着一般见 ...

  8. 【EXPDP】Oracle expdp中并行问题

    $ expdp hr/hr tables=test1 dumpfile=test2.dmp directory=pump parallel=4 Export: Release 11.2.0.4.0 - ...

  9. 生僻标签 fieldset 与 legend 的妙用

    谈到 <fieldset> 与 <legend>,大部分人肯定会比较陌生,在 HTML 标签中,属于比较少用的那一批. 我最早知道这两个标签,是在早年学习 reset.css ...

  10. 转 jmeter录制https请求

    jmeter录制https请求  文章转自:https://www.cnblogs.com/zhengna/p/10180998.html 工具:Jmeter4.0 + Java1.8 需求:对某ht ...