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