[CF1290B] Irreducible Anagrams - 构造,前缀和
Posted mollnn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CF1290B] Irreducible Anagrams - 构造,前缀和相关的知识,希望对你有一定的参考价值。
定义两个长度相同的串 s,t 为一对“神奇串”当且仅当 s 重新排列后可以变成 t。对于一对“神奇串” s,t ,定义他们为一对“超级神奇串”当且仅当能对它们划分成 k(k≥2)段(设为 s1,s2...sk,t1,t2...tk),使得所有的 1≤i≤k 都满足 si,ti 为一对“神奇串”。现在给你一个串 s,每次询问一个子串,问是否至少存在一个串使得该串与子串是一对“神奇串”但不是“超级神奇串”。
Solution
神仙的构造
如果这个串长度为 (1),显然 Yes
如果头尾字符不同,我们可以将所有和尾字符相同的移到开头,头字符相同的移到结尾,显然 Yes
如果字符种类数不小于 (3),并且头尾字符相同,我们可以将除头尾字符外的任意两种字符分别全部移到头尾,显然 Yes
其它情况 No
#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
char s[N];
int c[N][26],n,m,t1,t2;
signed main() {
cin>>s+1;
n=strlen(s+1);
for(int i=1;i<=n;i++) {
for(int j=0;j<26;j++) {
c[i][j]=c[i-1][j]+(s[i]==‘a‘+j);
}
}
cin>>m;
for(int i=1;i<=m;i++) {
cin>>t1>>t2;
if(t1==t2) puts("Yes");
else if(s[t1]!=s[t2]) puts("Yes");
else {
int cnt=0;
for(int j=0;j<26;j++) if(c[t2][j]-c[t1-1][j]) ++cnt;
if(cnt>2) puts("Yes");
else puts("No");
}
}
}
以上是关于[CF1290B] Irreducible Anagrams - 构造,前缀和的主要内容,如果未能解决你的问题,请参考以下文章
CF-1291 D - Irreducible Anagrams
CF 1215 B The Number of Products(思维题)
CF1005C Summarize to the Power of Two 暴力 map
CF1497E1 Square-free division (easy version)