CodeForces - 864D Make a Permutation! 水题(用了优先队列)
2017-09-29 16:49
411 查看
水题 写的有点丑
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <ctype.h>
#include <vector>
#include <algorithm>
#include <sstream>
#define PI acos(-1.0)
#define in freopen("in.txt", "r", stdin)
#define out freopen("out.txt", "w", stdout)
using namespace std;
typedef long long ll;
const int maxn = 200000 + 7, INF = 0x3f3f3f3f, mod = 1e9 + 7;
int n, nn;
int vis[maxn], cnt[maxn], ans[maxn];
priority_queue<int, vector<int>, greater<int> > qu;
void init() {
scanf("%d", &n);
nn = 0;
for(int i = 0; i < n; ++i) {
scanf("%d", &ans[i]);
cnt[ans[i]]++;
}
for(int i = 1; i <= n; ++i) {
if(cnt[i] == 0) qu.push(i), nn++;
}
printf("%d\n", nn);
}
void solve() {
if(cnt[ans[0]] > 1) { // first
if(qu.top() < ans[0]) {
cnt[ans[0]] --;
printf("%d", qu.top());
qu.pop();
} else {
vis[ans[0]]++;
printf("%d", ans[0]);
}
}
else {
printf("%d", ans[0]);
vis[ans[0]]++;
}
for(int i = 1; i < n; ++i) {
if(vis[ans[i]]) {
printf(" %d", qu.top());
qu.pop();
} else {
if(cnt[ans[i]] > 1) {
if(qu.top() < ans[i]) {
cnt[ans[i]] --;
printf(" %d", qu.top());
qu.pop();
} else {
vis[ans[i]]++;
printf(" %d", ans[i]);
}
} else {
printf(" %d", ans[i]);
vis[ans[i]]++;
}
}
}
}
int main() {
init();
solve();
return 0;
}
/*
4
3 2 2 3
6
4 5 6 3 2 1
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <ctype.h>
#include <vector>
#include <algorithm>
#include <sstream>
#define PI acos(-1.0)
#define in freopen("in.txt", "r", stdin)
#define out freopen("out.txt", "w", stdout)
using namespace std;
typedef long long ll;
const int maxn = 200000 + 7, INF = 0x3f3f3f3f, mod = 1e9 + 7;
int n, nn;
int vis[maxn], cnt[maxn], ans[maxn];
priority_queue<int, vector<int>, greater<int> > qu;
void init() {
scanf("%d", &n);
nn = 0;
for(int i = 0; i < n; ++i) {
scanf("%d", &ans[i]);
cnt[ans[i]]++;
}
for(int i = 1; i <= n; ++i) {
if(cnt[i] == 0) qu.push(i), nn++;
}
printf("%d\n", nn);
}
void solve() {
if(cnt[ans[0]] > 1) { // first
if(qu.top() < ans[0]) {
cnt[ans[0]] --;
printf("%d", qu.top());
qu.pop();
} else {
vis[ans[0]]++;
printf("%d", ans[0]);
}
}
else {
printf("%d", ans[0]);
vis[ans[0]]++;
}
for(int i = 1; i < n; ++i) {
if(vis[ans[i]]) {
printf(" %d", qu.top());
qu.pop();
} else {
if(cnt[ans[i]] > 1) {
if(qu.top() < ans[i]) {
cnt[ans[i]] --;
printf(" %d", qu.top());
qu.pop();
} else {
vis[ans[i]]++;
printf(" %d", ans[i]);
}
} else {
printf(" %d", ans[i]);
vis[ans[i]]++;
}
}
}
}
int main() {
init();
solve();
return 0;
}
/*
4
3 2 2 3
6
4 5 6 3 2 1
*/
相关文章推荐
- [Codeforces 864D]Make a Permutation!
- codeforces 864D - Make a Permutation!
- Codeforces 864D - Make a Permutation! 【贪心】
- Codeforces 864 D Make a Permutation!
- 【水题】CodeForces - 233A Perfect Permutation
- 【CodeForces 618B 】Guess the Permutation(水题)
- Codeforces 864D D. Make a Permutation!【思维+线段树+二分+这是一个煞笔做法】
- Codeforces 691D. Swaps in Permutation (并查集 + 优先队列)
- [Codeforces] #436 D. Make a Permutation!
- Codeforces Round #436 (Div. 2)D. Make a Permutation! codeforces-864D. Make a Permutation!
- codeforces 676A A. Nicholas and Permutation(水题)
- Codeforces Round #436 (Div. 2) D. Make a Permutation!(优先队列)
- Codeforces 691D. Swaps in Permutation (并查集 + 优先队列)
- NYOJ 366--D的小L【next_permutation水题】
- codeforces 625B KMP水题
- CodeForces 339D Xenia and Bit Operations (线段树水题)
- codeforces 653A A. Bear and Three Balls(水题)
- uva 10252 - Common Permutation 字符串水题
- codeforces 658A A. Bear and Reverse Radewoosh(水题)
- Codeforces:Diverse Permutation(找规律)