比赛
Genius’s Gambit
#include<cstring>
#include<iostream>
#include<cstdio>
using namespace std;
int a, b, k;
void work()
{
if(k == 0)
{
cout <<"Yes\n";
for(int i = 0; i < b; ++i) cout << 1;
for(int i = 0; i < a; ++i) cout << 0;
cout << endl;
for(int i = 0; i < b; ++i) cout << 1;
for(int i = 0; i < a; ++i) cout << 0;
cout << endl;
}
else if(k>a+b-2||b==1||a==0) {
cout << "No\n";return ;
}
else
{
cout << "Yes\n";
if(a > k)
{
for(int i = 0; i < b-1; ++i) cout << 1;
for(int i = 0; i < a-k; ++i) cout << 0;
cout << 1;
for(int i = 0; i < k; ++i) cout << 0;
cout << endl;
for(int i = 0; i < b-1; ++i) cout << 1;
for(int i = 0; i < a-k; ++i) cout << 0;
for(int i = 0; i < k; ++i) cout << 0;
cout << 1 << endl;
}
else
{
for(int i = 0; i < b; ++i) cout << 1;
for(int i = 0; i < a; ++i) cout << 0;
cout << endl;
for(int i = 0; i < b - (k - a)- 1; ++i) cout << 1;
cout << 0;
for(int i = 0; i < k - a; ++i) cout << 1;
for(int i = 0; i < a - 1; ++i) cout << 0;
cout << 1 << endl;
}
}
}
int main()
{
while(~scanf("%d %d %d", &a, &b, &k))
work();
return 0;
}
// a b k
// 10 4 12
B
参考博客
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
char s[200010];
char t[200010];
int Q[200010];
int H[200010];
int main()
{
int n, m, max1 = 0;
scanf("%d%d", &n, &m);
scanf("%s", s);scanf("%s", t);
int last = -1;
for (int i = 0; i < m; i++)
{
while (s[++last] != t[i]) ;
Q[i] = last;
}
last = n;
for (int i = m - 1; i >= 0; i--)
{
while (s[--last] != t[i]) ;
H[i] = last;
}
for (int i = 1; i < m; i++)
{
max1 = max(max1, H[i] - Q[i - 1]);
}
printf("%d\n", max1);
return 0;
}