7-28-試合

23965 ワード

テーマリンク:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=27454#overview
試合は……やはり英語が上手ではありませんか?
A.Printer Que
//単独で言うと……
B.Partencodings
簡単です
私は3つの配列a[n],b[n],c[n]---------a[n]は入力のn個の数を表し、b[n]は出力のn個の数を表し、c[n]はn個の左括弧の状態を表します。
b[0]=1
a[i]-a[i-1]>0の場合、i右括弧の対応する左括弧はその左側の第一位であり、b[i]=1、c[a[i]-1]=1(これをペアにした左括弧と表記する);
a[i]-a[i-1]=0の場合、c[a[i]-1]からc[0]の検索を開始し、最初にマークされていない右括弧jがペアの括弧である。b[i]=a[i]-j,c[j]=1
コードは以下の通りです
 1 #include<iostream>

 2 #include<string.h>

 3 #include<stdio.h>

 4 using namespace std;

 5 

 6 int main()

 7 {

 8     int n,x;

 9     int a[1000],b[1000],c[1000];

10     scanf("%d",&n);

11     while(n--)

12     {

13         scanf("%d",&x);

14         int i,j,k;

15         for(i=0;i<x;i++)

16             scanf("%d",&a[i]);

17         memset(c,0,sizeof(c));

18         c[a[0]-1]=1;

19         for(i=1;i<x;i++)

20              if((a[i]-a[i-1])!=0) c[a[i]-1]=1;

21         b[0]=1;

22         for(i=1;i<x;i++)

23         {

24             k=a[i]-a[i-1];

25             if(k!=0) b[i]=1;

26             else

27             {

28                 for(j=a[i]-1;j>=0;j--)

29                     if(c[j]==0){ b[i]=a[i]-j; c[j]=1;break;}

30             }

31         }

32         for(i=0;i<x-1;i++)

33             printf("%d ",b[i]);

34         printf("%d
",b[x-1]); 35 } 36 return 0; 37 }
C.Emag eht htti Em Pleh
まずボードを打って、点を対応の位置に置いて、最後にボードを印刷します。問題は難しくないです。細心の注意を払うことです。何度もWAしました。つまり、ポイントは“0”を減らすべきです。“1”と書きました。
コード:
 1 #include<iostream>

 2 #include<cstring>

 3 #include<string>

 4 #include<cstdio>

 5 using namespace std;

 6 

 7 int main()

 8 {

 9     char a[63],b[63];

10     string c[17];

11     int i,j,k,xa,xb;

12     for(i=0;i<17;i+=2)

13         c[i]="+---+---+---+---+---+---+---+---+";

14     for(i=1;i<17;i+=4)

15         c[i]="|...|:::|...|:::|...|:::|...|:::|";

16     for(i=3;i<17;i+=4)

17         c[i]="|:::|...|:::|...|:::|...|:::|...|";

18     gets(a);

19     gets(b);

20     xa=strlen(a);

21     xb=strlen(b);

22     k=7;

23     for(i=7;i<xa;i++)

24     {

25         if(a[i]==',')

26         {

27             if(i-k==3)

28         {

29             c[(8-(a[i-1]-'0'))*2+1][2+(a[i-2]-'a')*4]=a[k];

30             k=i+1;

31         }

32             else

33             {

34                 c[1+(8-(a[i-1]-'0'))*2][2+(a[i-2]-'a')*4]='P';

35                 k=i+1;

36             }

37         }

38     }

39      c[1+(8-(a[k+1]-'0'))*2][2+(a[k]-'a')*4]='P';

40      k=7;

41     for(i=7;i<xb;i++)

42     {

43         if(b[i]==',')

44         {

45             if(i-k==3)

46         {

47             c[1+(8-(b[i-1]-'0'))*2][2+(b[i-2]-'a')*4]=b[k]+32;

48             k=i+1;

49         }

50             else

51             {

52                 c[1+(8-(b[i-1]-'0'))*2][2+(b[i-2]-'a')*4]='p';

53                 k=i+1;

54             }

55         }

56     }

57     c[1+(8-(b[k+1]-'0'))*2][2+(b[k]-'a')*4]='p';

58     for(i=0;i<17;i++)

59         cout<<c[i]<<endl;

60     return 0;

61 }
D.Grand pais Famous
問題は難しくないです。一つの配列で数字を何回入力したかを記録して、もう二番目の数字を探して出力します。
コード:
 1 #include<iostream>

 2 #include<cstdio>

 3 #include<cstring>

 4 using namespace std;

 5 

 6 int main()

 7 {

 8     int a[10010],b[250000],i,j,x,y,n,max1,max2;

 9     while(scanf("%d%d",&x,&y)!=EOF)

10     {

11         if(x==0 && y==0) break;

12         memset(a,0,sizeof(a));

13         for(i=0;i<x*y;i++)

14         {

15             scanf("%d",&b[i]);

16             a[b[i]]++;

17         }

18         max1=-1;

19         max2=-1;

20         for(i=0;i<10010;i++)

21         {

22             if(a[i]>max1)

23             {

24                 max2=max1;

25                 max1=a[i];

26             }

27             else

28                 if(a[i]>max2)

29                     max2=a[i];

30         }

31         for(i=0,n=0;i<10010;i++)

32             if(a[i]==max2)

33             {

34                 if(n==0)

35                    printf("%d ",i);

36                 else

37                     printf(" %d",i);

38             }

39         printf("
"); 40 } 41 return 0; 42 }
 
E.An Old Stone Game
       単独で言えば…