链接:https://codeforces.com/gym/101194/attachments
题目大意:踢足球,一个小组有4个队,每个小组比6场,赢一场得3分平一场得1分,给出4个分数,问有没有唯一解,如果有输出Yes如果有多组解输出No如果没有解输出Wrong Scoreboard
题解:用来最笨的dfs打表-_-!!!
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
using namespace std;
long long n,t,s,w,p,fl=1,ff=1;
int a[5];
int b[5];
void dfs(int i)
{
if(fl==0)
return;
if(i==5)
{
int flag=1;
for(int j=1;j<=4;j++)
{
if(a[j]==b[j])
continue;
else
{
flag=0;
break;
}
}
if(flag==1)
s++;
return;
}
if(a[i]>=10||a[i]==8)
{
fl=0;
return;
}
else if(a[i]==9)
{
dfs(i+1);
}
else if(a[i]==7)
{
for(int j=1;j<=4;j++)
{
if(j==i)
continue;
else
{
b[j]+=1;
dfs(i+1);
b[j]-=1;
}
}
}
else if(a[i]==6)
{
for(int j=1;j<=4;j++)
{
if(j==i)
continue;
else
{
b[j]+=3;
dfs(i+1);
b[j]-=3;
}
}
}
else if(a[i]==5)
{
for(int j=1;j<=4;j++)
{
if(j==i)
continue;
else
{
b[j]+=1;
for(int k=j+1;k<=4;k++)
{
if(k==i)
continue;
else
{
b[k]+=1;
dfs(i+1);
b[k]-=1;
}
}
b[j]-=1;
}
}
}
else if(a[i]==4)
{
for(int j=1;j<=4;j++)
{
if(j==i)
continue;
else
{
b[j]+=3;
for(int k=1;k<=4;k++)
{
if(k==i||k==j)
continue;
else
{
b[k]+=1;
dfs(i+1);
b[k]-=1;
}
}
b[j]-=3;
}
}
}
else if(a[i]==3)
{
for(int j=1;j<=4;j++)
{
if(i==j)
continue;
else
b[j]+=1;
}
dfs(i+1);
for(int j=1;j<=4;j++)
{
if(i==j)
continue;
else
b[j]-=1;
}
for(int j=1;j<=4;j++)
{
if(i==j)
continue;
else
{
b[j]+=3;
for(int k=j+1;k<=4;k++)
{
if(k==i)
continue;
else
{
b[k]+=3;
dfs(i+1);
b[k]-=3;
}
}
b[j]-=3;
}
}
}
else if(a[i]==2)
{
for(int j=1;j<=4;j++)
{
if(j==i)
continue;
else
{
b[j]+=3;
for(int k=1;k<=4;k++)
{
if(k==i||k==j)
continue;
else
{
b[k]+=1;
}
}
dfs(i+1);
for(int k=1;k<=4;k++)
{
if(k==i||k==j)
continue;
else
{
b[k]-=1;
}
}
b[j]-=3;
}
}
}
else if(a[i]==1)
{
for(int j=1;j<=4;j++)
{
if(j==i)
continue;
else
{
b[j]+=1;
for(int k=1;k<=4;k++)
{
if(k==i||k==j)
continue;
else
{
b[k]+=3;
}
}
dfs(i+1);
for(int k=1;k<=4;k++)
{
if(k==i||k==j)
continue;
else
{
b[k]-=3;
}
}
b[j]-=1;
}
}
}
else
{
for(int j=1;j<=4;j++)
{
if(i==j)
continue;
else
b[j]+=3;
}
dfs(i+1);
for(int j=1;j<=4;j++)
{
if(i==j)
continue;
else
b[j]-=3;
}
}
return ;
}
int main()
{
cin>>t;
for(int i=1;i<=t;i++)
{
cout<<"Case #"<<i<<": ";
for(int j=1;j<=4;j++)
{
cin>>a[j];
}
memset(b,-1,sizeof(b));
sort(a+1,a+5);
w=0,p=0,s=0,fl=1;
memset(b,0,sizeof(b));
dfs(1);
if(s==0)
fl=0;
if(fl==0)
{
cout<<"Wrong Scoreboard"<<endl;
}
else
{
if(s==1)
cout<<"Yes"<<endl;
else if(s>=2)
cout<<"No"<<endl;
}
}
}