# bzoj4104【THUSC2015】解密运算

## 4104: [Thu Summer Camp 2015]解密运算

Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 301  Solved: 190
[Submit][Status][Discuss]

## Description

对于一个长度为N的字符串，我们在字符串的末尾添加一个特殊的字符"."。之后将字符串视为一个环，从位置1,2,3,...,N+1为起点读出N+1个字符，就能得到N+1个字符串。

ABCAAA.
BCAAA.A
CAAA.AB
AAA.ABC
AA.ABCA
A.ABCAA
.ABCAAA

.ABCAAA
A.ABCAA
AA.ABCA
AAA.ABC
ABCAAA.
BCAAA.A
CAAA.AB

6 3
1 1 1 3 0 1 2

1 2 3 1 1 1

## HINT

#i (i=1~4)    N=5*(i+1) M<=3

#5~6    N,M<=50 字符串中字符互不相同

#7~8    N,M<=1000 字符串中字符互不相同

#9~12    N,M<=1000

#13~#20    N,M<=200000

## Source

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define pa pair<int,int>
#define N 200005
using namespace std;
int n,m;
pa a[N];
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int main()
{
sort(a,a+n+1);
int tmp=a[0].second;
F(i,1,n)
{
printf("%d ",a[tmp].first);
tmp=a[tmp].second;
}
return 0;
}


02-27 1014

06-01 985

06-15 1072

06-01 172

05-19 258

06-09 592

04-21 533

04-26 82

05-18 561

09-09 274