Отримання знань

дистанційна підтримка освіти школярів


Шар
http://acm.pku.edu.cn/JudgeOnline/problem?id=1076

   Входные данные

   Выходные данные

   Пример входных данных

   Пример выходных данных

   Анализ условия и обсуждение идеи решения

   Пример решения на C++:

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

Попередня Зміст Наступна
В системі: гості - (1); користувачі - (0)