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;
        }
        
    }
}

 

posted @ 2020-11-23 15:38  liyexin  阅读(93)  评论(0编辑  收藏  举报