[codeforces 1291D] Irreducible Anagrams 前缀和+aba的情况太难想了
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
在线测评地址https://codeforces.com/contest/1291/problem/D
| Problem | Lang | Verdict | Time | Memory |
|---|---|---|---|---|
| D - Irreducible Anagrams | GNU C++11 | Accepted | 93 ms | 23500 KB |
//从样例中看到的情况是,只要全是雷同字母,并且数量>=2,输出No
//只有一个字母,输出Yes
//有不同的字母,输出Yes
//if(tot==2&&s[l]==s[r])printf("No\n");//此种情况没想到。
/*
配上例子进行说明
aba
1
1 3
No
*/
//需提高数据模拟能力
#include <stdio.h>
#include <string.h>
char s[200010];
int cnt[200010][30];//cnt[i][]统计i位置的字母数量
int main(){
int q,l,r,i,j,len,tot;
scanf("%s%d",s+1,&q);
len=strlen(s+1);
for(i=1;i<=len;i++)
for(j=0;j<26;j++)
cnt[i][j]=cnt[i-1][j]+(j==(s[i]-'a'));//此处错写成cnt[i][j]=cnt[i-1][j]+j==(s[i]-'a');//前缀和
while(q--){
tot=0;
scanf("%d%d",&l,&r);
if(l==r){
printf("Yes\n");
continue;
}
for(j=0;j<26;j++)
if(cnt[r][j]-cnt[l-1][j]>0)
tot++;
if(tot==1)printf("No\n");
else{
if(tot==2&&s[l]==s[r])printf("No\n");//此种情况没想到。
else printf("Yes\n");//tot>=2
}
}
return 0;
}
本文解析了Codeforces平台上的1291D题Irreducible Anagrams,通过前缀和算法解决字符串问题,分享了代码实现细节及样例解释,强调了数据模拟能力的重要性。

350

被折叠的 条评论
为什么被折叠?



