码迷,mamicode.com
首页 > 其他好文 > 详细

CF864D Make a Permutation!

时间:2017-10-06 16:54:03      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:strong   clu   ati   while   tin   c++   贪心   std   amp   

思路:

贪心,构造,模拟。

实现:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int t[200005], a[200005], vis[200005], n;
 4 int main()
 5 {
 6     while (cin >> n)
 7     {
 8         memset(t, 0, sizeof t); memset(vis, 0, sizeof vis);
 9         int cnt = 0;
10         for (int i = 0; i < n; i++) 
11         {
12             cin >> a[i]; t[a[i]]++;
13             if (t[a[i]] > 1) cnt++;
14         }
15         cout << cnt << endl;
16         queue<int> q;
17         for (int i = 1; i <= n; i++) if (!t[i]) q.push(i);
18         for (int i = 0; i < n; i++)
19         {
20             if (!t[a[i]]) continue;
21             else if (t[a[i]] == 1 && !vis[a[i]]) 
22             {
23                 cout << a[i] << " "; t[a[i]]--;
24             }
25             else 
26             {
27                 if (vis[a[i]]) 
28                 {    
29                     cout << q.front() << " "; q.pop(); 
30                 }
31                 else if (q.front() < a[i])
32                 {
33                     cout << q.front() << " "; q.pop(); 
34                 }
35                 else 
36                 {
37                     cout << a[i] << " "; vis[a[i]] = 1;
38                 }
39                 t[a[i]]--;
40             }
41         }
42         cout << endl;
43     }
44     return 0;
45 }

 

CF864D Make a Permutation!

标签:strong   clu   ati   while   tin   c++   贪心   std   amp   

原文地址:http://www.cnblogs.com/wangyiming/p/7631703.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!