期间放了4天假。
今天下午打vp。
T1第一眼不会,先写了T2。
然后T2过了样例,因为OJ炸了,导致没办法测,就以为自己过了。
回过来写了T1,发先其实每次1,只会移动到现在的2倍位置,于是就切掉了。
OJ终于好哩,但遗憾的是T2 TLE。
发现自己写的是假O(N),实际上 string 的时间复杂度导致我的代码变成了O(N^2)。
之后写了两份也没能优化出来。
就结束了。
晚上。
讲评过后,发现自己就是个。
可以知道,只有一次向下的机会。
于是我们每次要么向右,要么向下。
每次选择较小的走。
相同的时候优先向右。
向下过了一次就只能向右了。
code:
#include<bits/stdc++.h>
//#define int long long
#define debug puts("原始人,启洞!");
using namespace std;
const int N = 2e5 + 10;
char a[N], b[N];
string ans;
int main() {
// freopen(".in", "r", stdin);
// freopen(".out", "w", stdout);
int T;
cin >> T;
while(T--){
int n, res = 0;
cin >> n;
ans = "";
scanf("%s%s", a + 1, b + 1);
// for(int i = 1; i <= n; i++) cout << a[i];cout << endl;
// for(int i = 1; i <= n; i++) cout << b[i];
int i;
for(i = 1; i < n; i++){
if(a[i + 1] > b[i]){
ans += a[i + 1];
break;
}else if(a[i + 1] < b[i]){
ans += a[i];
res = 0;
}else if(a[i + 1] == b[i]){
ans += a[i];
res++;
}
}
if(i == n) ans += a[i];
for(; i <= n; i++){
ans += b[i];
}
cout << ans << endl << res + 1 << endl;
}
return 0;
}//by hwl