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
コードは以下の通りです
まずボードを打って、点を対応の位置に置いて、最後にボードを印刷します。問題は難しくないです。細心の注意を払うことです。何度もWAしました。つまり、ポイントは“0”を減らすべきです。“1”と書きました。
コード:
問題は難しくないです。一つの配列で数字を何回入力したかを記録して、もう二番目の数字を探して出力します。
コード:
E.An Old Stone Game
単独で言えば…
試合は……やはり英語が上手ではありませんか?
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
単独で言えば…