# Codeforces Round #616 (Div. 2) D. Irreducible Anagrams 找规律

## D. Irreducible Anagrams

time limit per test2 seconds
memory limit per test256 megabytes

Let's call two strings s and t anagrams of each other if it is possible to rearrange symbols in the string s to get a string, equal to t.

Let's consider two strings s and t which are anagrams of each other. We say that t is a reducible anagram of s if there exists an integer k≥2 and 2k non-empty strings s1,t1,s2,t2,…,sk,tk that satisfy the following conditions:

If we write the strings s1,s2,…,sk in order, the resulting string will be equal to s;
If we write the strings t1,t2,…,tk in order, the resulting string will be equal to t;
For all integers i between 1 and k inclusive, si and ti are anagrams of each other.
If such strings don't exist, then t is said to be an irreducible anagram of s. Note that these notions are only defined when s and t are anagrams of each other.

For example, consider the string s= "gamegame". Then the string t= "megamage" is a reducible anagram of s, we may choose for example s1= "game", s2= "gam", s3= "e" and t1= "mega", t2= "mag", t3= "e":

On the other hand, we can prove that t= "memegaga" is an irreducible anagram of s.

You will be given a string s and q queries, represented by two integers 1≤l≤r≤|s| (where |s| is equal to the length of the string s). For each query, you should find if the substring of s formed by characters from the l-th to the r-th has at least one irreducible anagram.

## Input

The first line contains a string s, consisting of lowercase English characters (1≤|s|≤2⋅105).

The second line contains a single integer q (1≤q≤105) — the number of queries.

Each of the following q lines contain two integers l and r (1≤l≤r≤|s|), representing a query for the substring of s formed by characters from the l-th to the r-th.

## Output

For each query, print a single line containing "Yes" (without quotes) if the corresponding substring has at least one irreducible anagram, and a single line containing "No" (without quotes) otherwise.

input
aaaaa
3
1 1
2 4
5 5
output
Yes
No
Yes
input
aabbbbbbc
6
1 2
2 4
2 2
1 9
5 7
3 5
output
No
Yes
Yes
Yes
No
No

## Note

In the first sample, in the first and third queries, the substring is "a", which has itself as an irreducible anagram since two or more non-empty strings cannot be put together to obtain "a". On the other hand, in the second query, the substring is "aaa", which has no irreducible anagrams: its only anagram is itself, and we may choose s1= "a", s2= "aa", t1= "a", t2= "aa" to show that it is a reducible anagram.

In the second query of the second sample, the substring is "abb", which has, for example, "bba" as an irreducible anagram.

## 题意

irreducible anagram 就是不满足条件的。

## 题解

1. 长度为1
2. 字符串的首位不相同
3. 字符串里面有超过2个不同的字符（因为能构造出首位不相同的对应字符串）

## 代码

#include<bits/stdc++.h>
using namespace std;
string s;
int q;
int cnt[26][200005];
int main(){
cin>>s;
cin>>q;
for(int i=0;i<s.size();i++){
cnt[s[i]-'a'][i]++;
if(i>0){
for(int j=0;j<26;j++){
cnt[j][i]+=cnt[j][i-1];
}
}
}
for(int i=0;i<q;i++){
int l,r;
cin>>l>>r;l--,r--;
if(l==r){
cout<<"Yes"<<endl;
continue;
}
if(s[l]!=s[r]){
cout<<"Yes"<<endl;
continue;
}
int Cnt = 0;
for(int j=0;j<26;j++){
int R = cnt[j][r];
int L = 0;
if(l>0)L=cnt[j][l-1];
if(R-L>0)Cnt++;
}
if(Cnt>2){
cout<<"Yes"<<endl;
continue;
}
cout<<"No"<<endl;
}
}
posted @ 2020-02-03 19:31  qscqesze  阅读(477)  评论(1编辑  收藏  举报