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;
}