1451B - Non-Substring Subsequence
题意
给定一个字符串 s s s,再给定一个字符串的子串 x x x,求这个字符串 s s s 中是否存在一个不连续的子序列满足 x x x
题解
- Key
满足这一情况当且仅当在 x x x 的首元素或者最后一个元素不是 s s s 中的第一个出现或是最后一个出现
- 证明
假定有一个不连续的子序列在上述条件不成立时存在,那么这个子序列 k k k 必须以字符串中的第一个出现开头,最后一个出现结尾,那么唯一存在的字符串就是长度等于给定原串 x x x 的字符串, x x x一定连续,与假设矛盾,原命题得证。
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int maxn = 1e6 + 7;
const int N = 1010;
const int inf = 0x3f3f3f;
char s[N];
int main() {
// ios::sync_with_stdio(false);
int t;
cin >> t;
while(t--) {
int l, r, n, q;
cin >> n >> q;
cin >> (s + 1);
while(q--) {
cin >> l >> r;
bool bad = true;
for(int i = 1; i < l && bad; i++) {
if(s[i] == s[l]) bad = false;
}
for(int i = r + 1; i <= n && bad; i++) {
if(s[i] == s[r]) bad = false;
}
if(bad) puts("NO");
else puts("YES");
}
}
return 0;
}
/*
数组开够了吗 开到上界的n+1次方
初始化了吗
*/