Codeforces Round #704 (Div. 2)
C. Maximum width
题意: 给定s串和t串,问是否能够从s中选择若干字符构成t串,要求s中选择出来的相邻的位置的最大值最大
题解: 预处理出t中每个字符能够属于的左右区间,然后枚举下即可
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int const MAXN = 2e5 + 10;
int n, m, T;
string s, t;
int r[MAXN];
int l[MAXN];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> m;
cin >> s;
cin >> t;
int sr = n - 1;
for (int i = m - 1; i >= 0 && sr >= 0; i--) {
while (s[sr] != t[i] && sr >= 0) sr--;
r[i] = sr--;
}
/*for (int i = 0; i < m; i++) {
cout << r[i] << " ";
}*/
int sl = 0;
for (int i = 0; i <= m; i++) {
while (s[sl] != t[i] && sl < n) sl++;
l[i] = sl++;
}
/*for (int i = 0; i < m; i++) {
cout << l[i] << " ";
}*/
int ans = 0;
// int last = l[0];
for (int i = 1; i < m; i++) {
ans = max(ans, r[i] - l[i - 1]);
}
cout << ans;
return 0;
}
D. Genius’s Gambit
题意: 给定a、b、k,要求构造出两个二进制数字x和y,使得x和y包含b个1、a个0,且x-y包含k个1
题解: 构造成这样就行了:
x:11…0…
y:10…1…
代码: