记录编号 |
267582 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HZOI 2016]阳光之春 |
最终得分 |
100 |
用户昵称 |
NewBee |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.654 s |
提交时间 |
2016-06-11 16:08:41 |
内存使用 |
0.77 MiB |
显示代码纯文本
#include<cstdio>
#include<algorithm>
#define Cu fclose(stdin);fclose(stdout);return 0;
#define Begin freopen("hzoi_spring.in","r",stdin);freopen("hzoi_spring.out","w",stdout);chul();Cu
using namespace std;
const int maxn=50010;
int cnt=0;
struct op{
int num,path,sobm;
op(){
num=path=sobm=0;
}
};
op r[maxn];
bool flag[maxn];
int a[maxn];int n;bool f=1;
bool comp1(op,op);
bool comp2(op,op);
void algo(int,int);
void chul();
int main(){
Begin
}
void chul(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&r[i].num);
r[i].path=i;
}
sort(r+1,r+1+n,comp1);
for(int i=1;i<=n;i++){
r[i].sobm=i;
}
sort(r+1,r+1+n,comp2);
a[0]=r[1].sobm;
r[0].sobm=r[1].sobm;
algo(r[1].sobm,1);
}
void algo(int x,int k){
if(k==n+1){
if(cnt==10)exit(0);
if(cnt==0&&r[n].sobm==a[n])return;
cnt++;
printf("total %d:",cnt);
for(int i=1;i<=n;i++){
printf(" %d",a[i]);
}
printf("\n\n");
return;
}
if(r[k-1].sobm==a[k-1]&&f){
for(int i=r[k].sobm;i<=n;i++){
if(!flag[i]){
if(i!=r[k].sobm){
f=0;
}
a[k]=i;
flag[i]=1;
algo(i,k+1);
flag[i]=0;
a[k]=0;
f=1;
}
}
return;
}
else{
int t=0;
for(int i=1;i<=n;i++){
if(!flag[i]){
a[k]=i;
flag[i]=1;
algo(i,k+1);
flag[i]=0;
}
}
}
}
bool comp1(op a,op b){
return a.num<b.num;
}
bool comp2(op a,op b){
return a.path<b.path;
}