题目链接

题目大意

本题大意是高强度转译的结果,建议点击题目链接查看原题目自行理解题意。

给你两个数字串,要求将数字串保持各自的相对顺序,合并为一个串。

  • 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 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注