codeforces - 1315C - 思维题
生活随笔
收集整理的這篇文章主要介紹了
codeforces - 1315C - 思维题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原題鏈接:https://codeforces.com/problemset/problem/1315/C
翻譯:
這是一個猜謎游戲,你需要猜中一個序列,謎題是一個序列,我們設為b,長度為n。你需要根據序列b猜出謎底序列,這里的這個序列我們設為a。謎底序列a是從1到2*n的序列,每個元素只能用一次且必須用一次。 a與b之間有以下關系:b序列中下標為i的單位恰好等于a序列中下標為2*i的單位與2*i-1的單位中的最小值,即b_i = min(a_2i-1,a_2i)。 你需要猜出排列字典序最小的a序列。可是有的謎題是無解的,這時候你輸出-1即可。
Input
第一行輸入一個t,接下來有t組測試數據(1<=t<=100) 第二行輸入一個n,表示序列b的長度(1<=n<=100) 第三行有n個數,分別是序列b中的單位元素(1<=bi<=2*n)
Output
輸出謎底序列a,中間用空格隔開,如果這個謎題是無解的輸出-1。 特別注意:謎底序列a是從1到2*n的序列,每個元素只能用一次且必須用一次。
Example
Input
5 1 1 2 4 1 3 4 1 3 4 2 3 4 5 5 1 5 7 2 8Output
1 2 -1 4 5 1 2 3 6 -1 1 3 5 6 7 9 2 4 8 10代碼實現:
#include<bits/stdc++.h> using namespace std;int main() {int t,n,j;cin >> t;for(int i=0; i<t; i++){int a[222]={0},b[222]={0};for(j=1; j <= 200; j++){b[j]=j;}scanf("%d",&n);for(int j=1; j <= 2*n; j=j+2){scanf("%d",&a[j]);b[a[j]]=0;}for(j=2; j <= 2*n; j=j+2){for(int k=1; k<=2*n; k++){if(b[k] != 0 && b[k] > a[j-1]){a[j] = b[k];b[a[j]] = 0;break;}}}for(j=1; j<=2*n; j=j+2){if(a[j] < a[j+1]){continue;}else{break;}}if(j > 2*n){for(j=1; j<=2*n; j++){printf("%d ",a[j]);}}else{printf("-1");}printf("\n");}return 0; }總結
以上是生活随笔為你收集整理的codeforces - 1315C - 思维题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国剩余定理——孙子定理
- 下一篇: meshlab比较模型误差