題目連接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=27454#overviewios
比賽.........仍是英語沒學好啊........有些題目看不懂.............= =數組
A.Printer Queuespa
//單獨講.............code
B.Parencodingsblog
很簡單.......ci
我是開了三個數組a[n],b[n],c[n]-------------a[n]表明輸入的n個數,b[n]表明是輸出的n個數,c[n]表明n個左括號的狀態(配對了仍是沒有配對);get
b[0]=1;string
若a[i]-a[i-1]>0,那麼i右括號所對應左括號就在它左邊第一位,記b[i]=1,c[a[i]-1]=1(標記這個被配對的左括號);io
若a[i]-a[i-1]=0,那麼從c[a[i]-1]開始向c[0]搜索,第一個沒有被標記的右括號j就是配對的括號,即b[i]=a[i]-j,c[j]=1(標記配對括號);class
代碼以下:
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\n",b[x-1]); 35 } 36 return 0; 37 }
C.Emag eht htiw Em Pleh
先打出棋盤,再把點放到對應的位置,最後打印出棋盤。題目不難,就是要細心............WA了好幾回,就是座標點應該減‘0’時,寫成了‘1’...........T T
代碼:
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.Grandpa is 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("\n"); 40 } 41 return 0; 42 }
E.An Old Stone Game
單獨講............