http://acm.pku.edu.cn/JudgeOnline/problem?id=1076
Код:
#include <cstdio> #include <iostream> #include <cstring> #include <memory> using namespace std; const char digit[11]="-123456789"; const char special[3]="X/"; char marking[1<<4][1<<4]; char name[1<<4]; int score[1<<4]; int main() { int i,curr,prev,knock,frame,ball,bonus,cntsorce,cntmarking,nextmark; while(scanf("%s",name)!=EOF) { memset(score,0,sizeof(score)); frame=cntmarking=cntsorce=1; nextmark=ball=bonus=0; prev=10; while((scanf("%d",&curr)!=EOF)&&(curr!=-1)) { knock=prev-curr; if((bonus&1)!=0) { score[cntsorce]=score[cntsorce]+10+knock; score[cntsorce+1]=score[cntsorce]; cntsorce++; bonus--; } if(bonus==2) { score[cntsorce]=score[cntsorce]+knock; bonus--; } if(curr>0) { marking[cntmarking][nextmark++]=digit[knock]; } else { marking[cntmarking][nextmark++]=special[ball]; } if((ball==0)&&(curr!=0)) { ball=1; prev=curr; continue; } if(curr==0) { bonus=bonus+2-ball; } else { score[cntsorce]=score[cntsorce]+10-curr; score[cntsorce+1]=score[cntsorce]; cntsorce++; } if(frame<10) { marking[cntmarking++][nextmark]='\0'; nextmark=0; } ball=0; curr=10; frame++; prev=curr; } printf("%-13s",name); if((curr!=10)||(cntmarking==10)) { for(i=1;i<cntmarking;i++) { printf("%-4s",marking[i]); } marking[cntmarking][nextmark]='\0'; printf("%-1s\n",marking[cntmarking]); } else { for(i=1;i<cntmarking-1;i++) { printf("%-4s",marking[i]); } printf("%-1s\n",marking[cntmarking-1]); } printf(" "); for(i=1;i<cntsorce;i++) { printf("%4d",score[i]); } printf("\n\n"); } return 0; }