Input file: Standard
Input Output file: Standard Ouptut
Time limit: 1 second
这是2016 ACM-ICPC Asia China-Final里面的一道水题,当时训练赛时做这道题思路不对,就没做出来。。
题目大意:四支球队进行循环赛,每两支队之间只进行一次比赛,一共进行6场,对于非平局:赢的队伍得3分,输的队伍得0分,对于平局:两只队伍各得1分。
现给出一种4只队伍的得分情况,判断会不会有这种情况出现:有的话如果你可以判断出6场比赛输赢或平的准确情况,输出Yes,不能输出No。不可能出现这种情况
的话输出Wrong Scoreboard。
思路:因为数据量较小,可以先枚举出所有可能的比赛情况得分,再判断就行了。(这么简单的思路我硬是没想到。。)
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 using namespace std; 5 int A[3]={3,1,0},B[3]={0,1,3}; 6 int visited[15][15][15][15]={0}; 7 void enu() 8 { 9 int x1,x2,x3,x4; 10 memset(visited,0,sizeof(visited)); 11 for(int i=0;i<3;i++) 12 for(int j=0;j<3;j++) 13 for(int k=0;k<3;k++) 14 for(int h=0;h<3;h++) 15 for(int l=0;l<3;l++) 16 for(int p=0;p<3;p++){ 17 x1=A[i]+A[j]+A[k]; 18 x2=B[i]+A[h]+A[l]; 19 x3=B[j]+B[h]+A[p]; 20 x4=B[k]+B[l]+B[p]; 21 visited[x1][x2][x3][x4]++; 22 } 23 } 24 int main() 25 { 26 int T,n,cas=1,a,b,c,d; 27 cin>>T; 28 enu(); 29 while(T--){ 30 cin>>a>>b>>c>>d; 31 if(visited[a][b][c][d]>1) 32 cout<<"Case #"<<cas++<<": No"<<endl; 33 else if(visited[a][b][c][d]==1) 34 cout<<"Case #"<<cas++<<": Yes"<<endl; 35 else 36 cout<<"Case #"<<cas++<<": Wrong Scoreboard"<<endl; 37 } 38 return 0; 39 }