一,思路:
1.首先我们要知道,蚂蚱只能一次向下走,只要走了,就要一直沿着 b数组,走到最后。
2.这个路径数量该怎么求?你可以通过样例发现规律,也可以通过模拟来找规律。(具体看代码注释,自己可以根据代码先模拟一下)
二,代码:
#include <iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
void Sovle() {
int n;
string a,b,path;
cin>>n>>a>>b;
//因为只要,蚂蚱往下走,那么后面的路就是固定的,不如我们先初始化路径,节省后面的操作。
path=a[0]+b;
//cnt--->表示这条路径有多少条不同的走法
//flag==1 表示蚂蚱还没有必须走到下面
//那么在什么情况下必须走到下面呢?当b[i-1]<a[i]的时候。
int cnt=1 ,flag=1;
//这里我也看别人代码,然后根据代码来模拟理解的
for(int i=1;i<n;i++){
if(a[i]<b[i-1]&&flag==1){
path[i]=a[i];
cnt=1;
}
if(a[i]>b[i-1] && flag==1) flag=0;
//规律,当这两个相同时,方案数量会 +1.
if(a[i]==b[i-1] &&flag==1) cnt++;
}
cout<<path<<"\n"<<cnt<<"\n";
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
while (t--) {
Sovle();
}
return 0;
}