1. 程式人生 > 實用技巧 >Codeforces Round #685 (Div. 2) B

Codeforces Round #685 (Div. 2) B

Codeforces Round #685 (Div. 2) B

大意

給你一個01串,每次詢問 \(l,r\) ,判斷是否存在原串的一個子序列等於 \(l,r\) 的子串。

思路

只要最左邊的 \(0/1\) 可以向左移動,或者最右邊的 \(0/1\) 可以向右移動,就一定存在,否則一定不存在。

程式碼

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;

#define ll long long
#define ull unsigned long long
#define cint const int&
#define Pi acos(-1)

const int mod = 998244353;
const int inf_int = 0x7fffffff;
const ll inf_ll = 0x7fffffffffffffff;
const double ept = 1e-9;

int t, n, q;
string a;

int main() {
    cin >> t;
    int l, r;
    while(t--) {
        cin >> n >> q;
        cin >> a;
        for(int i=1; i<=q; i++) {
            bool flag=0, s1=0, s2=0;
            cin >> l >> r;
            for(int j=r+1; j<=n; j++)
                if(a[j-1] == a[r-1]) flag=1;
            for(int j=l-1; j; j--)
                if(a[j-1] == a[l-1]) flag=1;
            if(flag) cout << "Yes" << endl;
            else cout << "No" << endl;
        }
    }
    return 0;
}`