World Cup (爆搜)

版权声明:本文为博主原创文章,转载请说明出处。 https://blog.csdn.net/xianpingping/article/details/82959769

题意:就是4支队伍,两两比一场,一共6场比赛。赢了+3,输了+0,平了各加1.问给了最终得分能否推断出每一场的真实局面。

这道题就是暴力枚举:1-2,1-3,1-4,2-3,2-4,3-4的所有情况。

开始把f设成了全局变量。。。应该是部分变量啊啊啊啊,这个毛病老是犯

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=1000000;
const int inf=0x3f3f3f3f;
int sheng=0,fu=0,ping=0;
int vis[110][110][110][110];

void dfs1(int a,int b,int f1,int f2,int f3,int f4){
    if(a==4 && b==4){
          ///  cout<<"f1:"<<f1<<" "<<f2<<" "<<f3<<" "<<f4<<endl;
        if(vis[f1][f2][f3][f4]==1)
        {
            vis[f1][f2][f3][f4]=2;
        }
        else if(vis[f1][f2][f3][f4]==0){
                vis[f1][f2][f3][f4]=1;
        }
        return ;
    }
   if(a==1 && b==2){
      f1+=3; f2+=0;
      dfs1(1,3,f1,f2,f3,f4);
      f1-=3;
      f1+=1; f2+=1;
      dfs1(1,3,f1,f2,f3,f4);
      f1-=1; f2-=1;
      f2+=3;
      dfs1(1,3,f1,f2,f3,f4);
   }
   else if(a==1 && b==3){

    f1+=3; f3+=0;
    dfs1(1,4,f1,f2,f3,f4);
    f1-=3;
    f1+=1;f3+=1;
    dfs1(1,4,f1,f2,f3,f4);
    f1-=1;f3-=1;
    f1+=0;f3+=3;
    dfs1(1,4,f1,f2,f3,f4);
   }
   else if(a==1 && b==4){
    f1+=3; f4+=0;
    dfs1(2,3,f1,f2,f3,f4);
    f1-=3;
    f1+=1;f4+=1;
    dfs1(2,3,f1,f2,f3,f4);
    f1-=1;f4-=1;
    f1+=0;f4+=3;
    dfs1(2,3,f1,f2,f3,f4);
   }
   else if(a==2 && b==3){
    f2+=3; f3+=0;
    dfs1(2,4,f1,f2,f3,f4);
    f2-=3;
    f2+=1;f3+=1;
    dfs1(2,4,f1,f2,f3,f4);
    f2-=1;f3-=1;
    f2+=0;f3+=3;
    dfs1(2,4,f1,f2,f3,f4);
   }
   else if(a==2 && b==4){
    f2+=3; f4+=0;
    dfs1(3,4,f1,f2,f3,f4);
    f2-=3;
    f2+=1;f4+=1;
    dfs1(3,4,f1,f2,f3,f4);
    f2-=1;f4-=1;
    f2+=0;f4+=3;
    dfs1(3,4,f1,f2,f3,f4);
   }
   else if(a==3 && b==4){
       ///    cout<<"f1:"<<f1<<" "<<f2<<" "<<f3<<" "<<f4<<endl;
    f3+=3; f4+=0;
    dfs1(4,4,f1,f2,f3,f4);
    f3-=3;
    f3+=1;f4+=1;
    dfs1(4,4,f1,f2,f3,f4);
    f3-=1;f4-=1;
    f3+=0;f4+=3;
    dfs1(4,4,f1,f2,f3,f4);
   }
}
int main()
{
    int t;
    int cas=0;
    int a,b,c,d;
    scanf("%d",&t);
    memset(vis,0,sizeof(vis));
    dfs1(1,2,0,0,0,0);

    while(t--){
            cas++;
        scanf("%d%d%d%d",&a,&b,&c,&d);
           if(vis[a][b][c][d]==0){
            cout<<"Case #"<<cas<<": "<<"Wrong Scoreboard"<<endl;
        }
        else{
            if(vis[a][b][c][d]==1){
               cout<<"Case #"<<cas<<": "<<"Yes"<<endl;
            }
            else{
               cout<<"Case #"<<cas<<": "<<"No"<<endl;
            }
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/xianpingping/article/details/82959769