题目链接:点击查看

题目大意:首先规定两个字符串 s 和 t 为 Anagrams ,当且仅当字符串 t 可以通过字母重新排列后得到 s ,也就是每个字符出现的次数相同,但位置不做要求,紧接着规定另一个定义,规定若字符串 s 和字符串 t 为 reducible anagram 当且仅当两个字符串在顺序不变的情况下,被切成 k 个部分(k >= 2),且这 k 个部分全都是 Anagrams ,反之,如果字符串 s 和 t 不存在reducible anagram 的话,那么这两个字符串的关系就是irreducible anagram

现在给出字符串 s ,再给出 m 次查询,每次查询问对于字符串 s 的子串 [ l , r ] 能否构造出至少一种irreducible anagram

写给自己看的:这场cf不多评价了,我的贡献除了A题的签到比较快一点,其他的就真的一直在挂机了,自闭死了,最烦下标的题目,还连出了两个,把自己心态写崩了,还是得多练,还好队友给力,抬了我一手,让我没掉分,到了比较擅长的字符串,也就是这个题目一看,结果半天读不懂题,啥都憋不出来,最后感觉可能和区间内的颜色数量有关系,草草写了个莫队比赛就结束了,赛后让队友帮忙读了读题发现就是一个大水题,唉,读题也是一个大问题,烦死了烦死了

题目分析:其实真正理解题意后反而觉得不难了,我们只需要边猜边构造,就差不多能想全了,这里一共有三种情况需要输出yes,我们逐次讨论

第一种,也是最简单的一种,因为样例中都给出了,也就是 l == r 的情况,因为此时只有一个字母,而 k 是大于等于2的,所以必不可能组成满足条件的字符串使得形成reducible anagram

第二种,也是比较容易构造出来的,也就是 s[ l ] != s[ r ] 的情况,只需要构造出来新串令首位两个位置互换,其余位置不变即可,因为此时的原子串 s 和新字符串 t 显然满足 Anagrams 的条件,但不可能满足 reducible anagram 的条件,因为无论如何切割,都会有第一个字母和最后一个字母的不匹配,使得连带着这一段的字符串无法对应形成 Anagrams ,也就导致了两个字符串无法满足条件

第三种,也是稍微比较难想到的一种,也就是区间颜色种类数大于等于三种时,一定可以构造出一种满足yes的情况,首先如果能来到这种情况,那么显然是 s[ l ] == s[ r ] 的情况了(如果不满足的话在第二种情况就已经yes了),如果有三种颜色的话,那么说明当前的字符串长度至少为 4,我们举个很简单的例子,abca,显然 caab 就是一个满足 irreducible anagram 关系的字符串,为什么需要颜色数大于等于三呢,因为如果两端相等,颜色数大于等于三就说明区间内一定有两种字母与端点的字母不同,此时只要将这两种字母与端点字母适当交换,就能够形成第二种的情况了

讨论完三种情况后,代码还是非常简单的,至于区间内颜色种类数,因为字母只有26个,写一个简单dp就能每次O(26)的时间复杂度查询了,至于莫队,不清楚会不会超时,没试过,有心人可以去试一下

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=2e5+100;char s[N];int dp[N][30];int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);scanf("%s",s+1);int len=strlen(s+1);for(int i=1;i<=len;i++){for(int j=0;j<26;j++)dp[i][j]=dp[i-1][j];dp[i][s[i]-'a']++;}int m;scanf("%d",&m);while(m--){int l,r,cnt=0;//cnt记录有多少种颜色 scanf("%d%d",&l,&r);for(int i=0;i<26;i++)if(dp[r][i]-dp[l-1][i])cnt++;if(l==r||s[l]!=s[r]||cnt>=3)puts("Yes");elseputs("No");}return 0;
}

CodeForces - 1291D Irreducible Anagrams(思维+构造)相关推荐

  1. CodeForces - 125C Hobbits' Party(思维+构造)

    题目链接:点击查看 题目大意:有一个派对,现在有 n 个人参加,题目要求我们构造出一种参加方式,满足条件且可以维持的天数最大: 任意两天中至少有一个相同的人参加 任意三天中不能有一个相同的人参加 输出 ...

  2. CodeForces - 1270C Make Good(思维+构造)

    题目链接:点击查看 题目大意:给出一个由n个数字构成的数列,现在已知其累加和为sum,异或和为xor,现在允许我们向数列中添加0~3个数,以满足sum=2*xor,构造出任意一种方案 题目分析:一开始 ...

  3. CodeForces - 1270D Strange Device(思维+构造)

    题目链接:点击查看 题目大意:规定一个含有n个元素的数组a,每个元素互不相等,但是全部未知,现在给出一台机器,这台机器有两个参数,分别是k和m,其意义是每次可以询问k个下标,机器将给出k个下标中第m大 ...

  4. CodeForces - 1504C Balance the Bits(思维+构造)

    题目链接:https://vjudge.net/problem/CodeForces-1504C 题目大意:给出一个长度为 nnn 的 010101 串,现在要求构造出两个长度为 nnn 的合法括号序 ...

  5. Codeforces Round #624 (Div. 3) E. Construct the Binary Tree 思维 + 构造

    传送门 文章目录 题意: 思路: 题意: 给你n,dn,dn,d,让你构造有nnn个点的二叉树,他们每个节点深度和为ddd. n,d≤3000n,d\le 3000n,d≤3000. 思路: 先考虑不 ...

  6. 【CodeForces - 798D】Mike and distribution (思维构造,贪心,黑科技)

    题干: Mike has always been thinking about the harshness of social inequality. He's so obsessed with it ...

  7. CodeForces - 1265D Beautiful Sequence(贪心+构造+思维)

    题目链接:点击查看 题目大意:给出a个0,b个1,c个2,d个3,要求构造一种序列,使得数列两两之间绝对值之差等于1,若不能构造输出NO 题目分析:首先我们需要稍微讨论一下特殊情况,那就是对于两端的数 ...

  8. CodeForces - 618B Guess the Permutation(思维+构造)

    题目链接:点击查看 题目大意:先给出一个长度为n的序列ai,这个序列是1~n全排列中的其中一种,再给出一个n*n的矩阵,maze[i][j]=val代表min(ai,aj)=val,要求我们构造出原始 ...

  9. CodeForces - 715A Plus and Square Root(思维+构造)

    题目链接:点击查看 题目大意:我们在玩一个游戏,屏幕上有一个数字,我们设这个数字为x,初始值为2,我们一开始的等级是k,我们每一次可以有两种操作: 加法:可以让x加上k 开根号:可以让x开根号,并且等 ...

最新文章

  1. 浅谈《think in java》:一 对象导论总结
  2. 2008.04.14狼图腾
  3. selenium - webdriver常用方法
  4. 【Laravel】连接sqlite,Database [] not configured,sqlite example
  5. http Error 503 server unavailable
  6. 转载:程序员从初级到中级10个秘诀
  7. HP服务器F10 Function Disabled,无法使用F10安装操作系统
  8. Python机器学习:梯度下降法007使用scikit中的随机梯度下降法
  9. 纯java生成验证码 java生成图片并保存
  10. Java-JDK:JDK百科
  11. 干货 | 万字长文带你复习线性代数!
  12. MySQL的备份与还原
  13. WIN10计算机不支持3D游戏怎么办,教你如何在win10系统中开启3D加速?
  14. 华为篇-嵌入式公司待遇盘点-第二期
  15. 职场上做“独狼”注定失败
  16. Creo8.0将默认单位永久设置为公制毫米的方法
  17. NameNode和DataNode中重要的数据结构解析
  18. Android 调试您的应用
  19. spring 事务隔离级别实测
  20. PendSV中断服务函数

热门文章

  1. 飚王硬盘盒怎么样_ORICO M.2固态移动硬盘盒众测分享:移动存储也高速
  2. MySQL安全等于的介绍
  3. SpringCloud相关概念介绍
  4. es6语法-箭头函数
  5. Eureka集群部署
  6. css 首字下沉 错位,css+div错位问题的修复小结
  7. oracle字段重复新增错误,Oracle 判断表或字段是否存在新增/修改表结构可重复执行sql...
  8. php开启mysqlnd,如何启用mysqlnd的PHP?
  9. data中的数据如何在innerhtml中调用_Vuex中调用state数据
  10. 国际主流云厂商生存画像:三大赛道愈发清晰