Codeforces Round #269 (Div. 2) B

来源:互联网 发布:torch软件去马赛克 编辑:程序博客网 时间:2024/05/20 06:08

B. MUH and Important Things


        题意:n个数,h1~hn,他们之中可能有相同的。给这n个数排序,问是否有大于三种排法(相同的数可以交换)。如果有,输出其中三中。

        思路:找这些数中有没有一样的。如果有两组一样的,就可以,交换输出一下就行了。


#include <iostream>      #include <stdio.h>      #include <cmath>      #include <algorithm>      #include <iomanip>      #include <cstdlib>      #include <string>       #include <vector>      #include <queue>      #include <stack>      #include <map>    #include <set>    #include <string.h>#include <ctype.h>        using namespace std;    int n;int num[2010];int rank[2010];bool cmp(int a,int b){return num[a]<num[b];}int main(){while(cin>>n){for(int i=1;i<=n;i++){cin>>num[i];}for(int i=0;i<=n;i++)rank[i]=i;sort(rank+1,rank+n+1,cmp);int cnt=0;int k1;int k2;for(int i=2;i<=n;i++){if(num[rank[i]]==num[rank[i-1]])cnt++;if(cnt==1)k1=i;if(cnt==2)k2=i;}if(cnt>1){cout<<"YES"<<endl;for(int i=1;i<=n;i++){cout<<rank[i]<<" ";}cout<<endl;int t=0;for(int i=1;i<=n;i++){if(num[rank[i]]==num[rank[i+1]]){if(t==0){cout<<rank[i+1]<<" "<<rank[i]<<" ";i++;t++; continue;}else{}}cout<<rank[i]<<" ";}cout<<endl;t=0;for(int i=1;i<=n;i++){if(num[rank[i]]==num[rank[i+1]]){if(t==0){t++;}else if(t==1){cout<<rank[i+1]<<" "<<rank[i]<<" ";i++;t++; continue;}}cout<<rank[i]<<" ";}cout<<endl;}else{cout<<"NO"<<endl;}}return 0;}


0 0
原创粉丝点击