source:题目链接
题意:这是2016 ACM-ICPC China-Final的L题,说4个队踢单循环赛,赢得3分输得0分平得1分,六场比赛下来会出现许多种分数情况,现在给一个分数情况,问这种分数情况可不可能出现,可能出现的话是否是唯一的?
思路:6层循环暴力枚举比赛情况,4维数组存储四个队每个分数情况出现个数。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int table[11][11][11][11]; //用于记录所有可能出现的比分情况中某种得分情况出现的次数
int main()
{
int t,T,n,a,b,c,d,sa,sb,sc,sd;
int score_p1[3]={3,0,1};
int score_p2[3]={0,3,1};
//清零
memset(table,0,sizeof(table));
//暴力枚举六场比赛情况
for(int ab=0;ab<3;ab++)
for(int ac=0;ac<3;ac++)
for(int ad=0;ad<3;ad++)
for(int bc=0;bc<3;bc++)
for(int bd=0;bd<3;bd++)
for(int cd=0;cd<3;cd++)
{
//计算每种情况下得分情况
sa=score_p1[ab]+score_p1[ac]+score_p1[ad];
sb=score_p2[ab]+score_p1[bc]+score_p1[bd];
sc=score_p2[ac]+score_p2[bc]+score_p1[cd];
sd=score_p2[ad]+score_p2[bd]+score_p2[cd];
table[sa][sb][sc][sd]++;
}
scanf("%d",&T);
for(t=1;t<=T;t++)
{
scanf("%d%d%d%d",&a,&b,&c,&d);
switch(table[a][b][c][d])
{
case 0: printf("Case #%d: Wrong Scoreboard\n",t);break;
case 1: printf("Case #%d: Yes\n",t);break;
default:printf("Case #%d: No\n",t);break;
}
}
return 0;
}