Codeforces Round #685 (Div. 2)B. Non-Substring Subsequence(贪心)
地址:http://codeforces.com/contest/1451/problem/B
题意:
给出只含01的字符串s, q次询问
每次给出L,R,是否在S中存在一个子字符串(这里的子字符串不可全连续,保证顺序一样)与[L,R]相同?
解析:
假设在[L,R]之外存在一个这样的子字符串,那么一定存在一个Si和SL相同,或者存在一个Si与SR相同。
最省事的查找方式,就是保留原S[L+1,R]或S[L,R-1],去寻找[1,L-1]或[R+1,N]中是否存在SL或SR即可。这就是贪心的思路。
#include<iostream> #include<cstring> #include<algorithm> #include<queue> #include<stack> using namespace std; const int maxn=2e5+10; struct node { int a,b; }st[maxn]; int main() { int t; cin>>t; while(t--) { int n,q; cin>>n>>q; string s; cin>>s; int c1=0,c0=0; for(int i=0;i<n;i++) { if(s[i]=='0') c0++; else c1++; } while(q--) { int l,r; cin>>l>>r; l--; r--; int ok=0; for(int i=r+1;i<n;i++) { if(s[i]==s[r]) { ok=1;break; } } if(!ok) { for(int i=0;i<l;i++) { if(s[i]==s[l]) { ok=1; break; } } } if(!ok) cout<<"NO"<<endl; else cout<<"YES"<<endl; } } }