1. 程式人生 > >Kattis - missinggnomesD Missing Gnomes (思路題)

Kattis - missinggnomesD Missing Gnomes (思路題)

題目:

題意:

給出已經去除了幾個數的一個序列,任務是將去除的數字插回去補全這個序列,輸出字典序排在第一的那個補全的序列。

例如:

樣例輸入:

5 3

1 4 2

樣例輸出:

1 3 4 2 5

思路:

用陣列存一下給出的序列,用一個佇列存一下被去除的數字的序列(由小到大排列),然後分別比較兩個容器的第一個元素,那個小就先輸出哪一個,知道兩個容器中的元素都輸出完畢。

程式碼:

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define FRE() freopen("in.txt","r",stdin)
using
namespace std; typedef long long ll; const int maxn = 1e5+10; int a[maxn],vis[maxn]; int main(){ //FRE(); int n,m; scanf("%d%d",&n,&m); for(int i = 0; i<m; i++){ scanf("%d",&a[i]); vis[a[i]] = 1; } queue<int> que; for(int i = 1; i<=n; i++){
if(vis[i] == 0){ que.push(i); } } int cnt = 0; while(cnt<m && !que.empty()){ if(a[cnt] < que.front()){ printf("%d\n",a[cnt++]); } else{ printf("%d\n",que.front()); que.pop(); } } //將剩餘的元素全部輸出出來
while(cnt<m){ printf("%d\n",a[cnt++]); } while(!que.empty()){ printf("%d\n",que.front()); que.pop(); } return 0; } /* PutIn: 5 3 1 4 2 PutOut: 1 3 4 2 5 PutIn: 7 4 6 4 2 1 PutOut: 3 5 6 4 2 1 7 */
View Code