2010-1084

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

题目类型:

模拟#.#

题目大意:

地球人的足球比赛=.=
进入点球大战后,给出所有球员每一轮是否能罚进点球的表,假定三轮肯定能够结束比赛,每轮球员的主罚顺序不变并且已经确定,要求输出哪一方获胜以及最终比分。本来不想解释地球人的足球比赛规则了,因为刚刚过世界杯。现在还是大致说一下计分方法:1、如果踢完五轮之后,也无法改变胜负,不再踢;2、五轮之后还没有分出胜负,则继续踢,直到某一轮结束之后,分出胜负为止。

解题思路:

五轮之前:每一次点球之后,进行判断,比赛是否结束。五轮之后:每一轮点球之后,进行判断,比赛是否结束。理解清楚地球人的规则就行~~

代码:


{{{

//By sxstar

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>

using namespace std;

int main()
{
    int casenum;

    scanf("%d", &casenum);
    for (int ii=1;ii<=casenum;ii++)
    {
        int a[100];
        char str[100];


        for (int i=1;i<=11;i++)
        for (int j=1;j<=3;j++)
        {
            scanf("%s", str);
            if (strcmp(str,"yes")==0)
                a[(11*(j-1)+i)*2-1]=1;
            else
                a[(11*(j-1)+i)*2-1]=0;      
        }
        for (int i=1;i<=11;i++)
        for (int j=1;j<=3;j++)
        {
            scanf("%s", str);
            if (strcmp(str,"yes")==0)
                a[(11*(j-1)+i)*2]=1;
            else
                a[(11*(j-1)+i)*2]=0;        
        }


        int hh=1;
        int ff=0;
        int a1=0;
        int a2=0;
        while (hh<=10 && ff==0)
        {
            if (hh%2) a1 += a[hh];
            else a2 += a[hh];
            if (a1>a2+(11-hh)/2)
                ff=1;
            if (a2>a1+(10-hh)/2)
                ff=2;       
            hh++;   

        }

        while (ff==0)
        {
            a1+=a[hh];
            hh++;
            a2+=a[hh];
            hh++;
            if (a1<a2) ff=2;
            if (a1>a2) ff=1;


        }

        printf("Match %d:\n", ii);
        printf("Winner: ");
        if (ff==1)
            printf("home\n");
        else
            printf("away\n");
        printf("Score: %d:%d\n", a1, a2);

    }

}

}}}


By sxstar

题目类型:

模拟#.#

题目大意:

地球人的足球比赛=.=

进入点球大战后,给出所有球员每一轮是否能罚进点球的表,假定三轮肯定能够结束比赛,每轮球员的主罚顺序不变并且已经确定,要求输出哪一方获胜以及最终比分。本来不想解释地球人的足球比赛规则了,因为刚刚过世界杯。现在还是大致说一下计分方法:1、如果踢完五轮之后,也无法改变胜负,不再踢;2、五轮之后还没有分出胜负,则继续踢,直到某一轮结束之后,分出胜负为止。

解题思路:

五轮之前:每一次点球之后,进行判断,比赛是否结束。五轮之后:每一轮点球之后,进行判断,比赛是否结束。理解清楚地球人的规则就行~~

代码:

//By sxstar
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
using namespace std;
int main()
{
    int casenum;
    scanf("%d", &casenum);
    for (int ii=1;ii<=casenum;ii++)
    {
        int a[100];
        char str[100];
        for (int i=1;i<=11;i++)
        for (int j=1;j<=3;j++)
        {
            scanf("%s", str);
            if (strcmp(str,"yes")==0)
                a[(11*(j-1)+i)*2-1]=1;
            else
                a[(11*(j-1)+i)*2-1]=0;      
        }
        for (int i=1;i<=11;i++)
        for (int j=1;j<=3;j++)
        {
            scanf("%s", str);
            if (strcmp(str,"yes")==0)
                a[(11*(j-1)+i)*2]=1;
            else
                a[(11*(j-1)+i)*2]=0;        
        }
        int hh=1;
        int ff=0;
        int a1=0;
        int a2=0;
        while (hh<=10 && ff==0)
        {
            if (hh%2) a1 += a[hh];
            else a2 += a[hh];
            if (a1>a2+(11-hh)/2)
                ff=1;
            if (a2>a1+(10-hh)/2)
                ff=2;       
            hh++;   
        }
        while (ff==0)
        {
            a1+=a[hh];
            hh++;
            a2+=a[hh];
            hh++;
            if (a1<a2) ff=2;
            if (a1>a2) ff=1;
        }
        printf("Match %d:\n", ii);
        printf("Winner: ");
        if (ff==1)
            printf("home\n");
        else
            printf("away\n");
        printf("Score: %d:%d\n", a1, a2);
    }
}

By sxstar