奶牛合影

 

1.最小表示法裸题。

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<queue>
 6 using namespace std;
 7 
 8 const int maxn=300005;
 9 
10 int n,T;
11 int a[2*maxn];
12 
13 void print(int p,int q){
14     int ans=min(p,q);
15     for(int i=ans;i<ans+n;i++)
16         printf("%d%c",a[i],i+1==ans+n?'\n':' ');
17 }
18 
19 void solve(){
20     int i=0,j=1,k;
21     while(i<n&&j<n){
22         for(k=0;k<n;k++)
23             if(a[i+k]!=a[j+k]) break;
24         if(k==n) break;
25         if(a[i+k]>a[j+k]) i+=k+1;
26         else if(a[i+k]<a[j+k]) j+=k+1;
27         if(i==j) j++;
28     }
29     print(i,j);
30     //cout<<min(i,j)<<endl;
31 }
32 
33 int main()
34 {   cin>>T;
35     while(T--){
36         scanf("%d",&n);
37         for(int i=0;i<n;i++){
38             int tem;scanf("%d",&tem);
39             a[i]=tem;
40             a[i+n]=tem;
41         }
42         solve();
43     }
44     return 0;
45 }

 

posted @ 2017-05-19 15:12  天之道,利而不害  阅读(307)  评论(0编辑  收藏  举报