Codeforces Round #731 (Div. 3) C题

时间:2021-07-14
本文章向大家介绍Codeforces Round #731 (Div. 3) C题,主要包括Codeforces Round #731 (Div. 3) C题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目意思:a, b两人同时操作某个文件,0代表增加,大于零的数代表修改某一行的值,现在要求在不改变相对顺序的形况下使得他们可以成功。

也就是说你可以在a中插入b,在b中插入a。但你不能改变各自的顺序。

思路:暴力模拟,有0先放0,没0就看谁小。某一组跑完后又单独跑另外一组。要注意的是比较大小的那里要写<=,还有单单独跑的那里要找看又没有0.

每次遇到0,k都要加1。

链接:https://codeforces.com/contest/1547/problem/C

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define ctx cout << "xxxxx" << endl
#define inf 0x3f3f3f3f
#define int long long
#define eps 0.000000001
#define forn for(int i = 1; i <= n; i++)
#define ct1 cout << -1 << endl;
const int INF = 0x3f3f3f3f;
const double pai = 3.141592653589;
const int maxn = 305;
int a[maxn], b[maxn];

void solve() {
int k, n, m;
cin >> k >> n >> m;
int cot_zero = 0, _max = 0;
for(int i = 1; i <= n; i++) {
cin >> a[i];
}
for(int i = 1; i <= m; i++) {
cin >> b[i];
}
int i = 1, j = 1;
vector<int> ans;
while(i <= n || j <= m) {
if(a[i] == 0 && i <= n) {
ans.push_back(0);
i++, k++;
continue;
}
if(b[j] == 0 && j <= m) {
ans.push_back(0);
j++, k++;
continue;
}
if(a[i] <= b[j] && i <= n && j <= m) {
if(a[i] > k){
ct1;
return ;
}else{
ans.push_back(a[i++]);
continue;
}
}else if(b[j] <= a[i] && i <= n && j <= m){
if(b[j] > k){
ct1;
return ;
}else{
ans.push_back(b[j++]);
continue;
}
}
if(i <= n){
for(; i <= n; i++){
if(a[i] > k){
ct1;
return ;
}else{

ans.push_back(a[i]);
if(a[i] == 0) k++;
}
}
}
if(j <= m){
for(; j <= m; j++){
if(b[j] > k){
ct1;
return ;
}else{

ans.push_back(b[j]);
if(b[j] == 0) k++;
}
}
}
}
for(int x : ans) cout << x << " ";
cout << endl;
}

signed main() {
int t;
cin >> t;
while(t--) {
solve();
}
}

不得不说博客园的格式不好看...。

原文地址:https://www.cnblogs.com/lfzdsg/p/15010376.html