题目大意
本题大意是高强度转译的结果,建议点击题目链接查看原题目自行理解题意。
给你两个数字串,要求将数字串保持各自的相对顺序,合并为一个串。
- k值表示行数,如果即将放入串的数字大于当前行数,则无法放入。
- 每当放入串的数字是
0
,行数增加1
解题思路
把 a 和 b 当成 2 个队列
每次检查有没有一个队列头能放进答案输出的队列
一直放直至结束
其实本题难点在于读懂题意。。。这是我卡了两个小时的原因
代码实现
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e3+7;
const double eps = 1e-8;
const int inf = 0x3f3f3f3f;
int T;
int n,m,k;
int a[N],b[N];
int qa[N],qb[N];
int nn,mm;
int cnt,ans[N];
signed main(){
cin>>T;
while(T--){
cnt=0;
cin>>k>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>b[i];
}
a[n+1]=inf;
b[m+1]=inf;
bool ok=1;
for(int i=1,j=1;;){
if(i==n+1 && j==m+1) break;
if(a[i]<=k && i<=n){
ans[++cnt]=a[i];
if(a[i]==0) k++;
i++;
continue;
}
if(b[j]<=k && j<=m){
ans[++cnt]=b[j];
if(b[j]==0) k++;
j++;
continue;
}
ok=0;
break;
}
if(ok){
for(int i=1;i<=cnt;i++){
cout<<ans[i]<<" ";
}
cout<<"\n";
}
else{
cout<<-1<<"\n";
}
}
return 0;
}
0 条评论