本文主要是介绍Codeforces Round #269 (Div. 2) B,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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;
}
这篇关于Codeforces Round #269 (Div. 2) B的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!