足球比赛
题目描述
M中学一年一度的足球比赛开始啦,林老师作为一个热心观众,在得到消息后急急忙忙的赶到了M中学,可惜的是,当林老师赶到M中学时,所有的比赛都已经结束啦。最后林老师只得到了所有队伍的总积分表,林老师想知道,今年M中学的足球比赛一共有多少种可能的比赛情况(所有的足球队两两之间都会进行一场比赛,胜者得3分,败者得0分,打平得1分,任何两个球队之间有胜负关系不同的情况视为两种比赛情况)。
输入格式
第一行输入一个数字n(2≤n≤8)——表示M中学参加比赛的球队数量 接下来一行输入n个数字,表示每支球队得到的积分总数。题目保证至少存在一种可能的比赛情况。
输出格式
输出一个数字,表示可能的比赛情况数量。
样例
样例输入1
3
3 3 3
样例输出1
2
样例输入2
6
5 6 7 7 8 8
样例输出2
121
c++AC题解
#include<cstdio>
using namespace std;
int n,a[100005],sc[100005],ans;
inline void dfs(int u,int v){
if(u==n){
if(sc[u]==a[u])ans++;
return;
}
if(v==n+1){
if(sc[u]==a[u])dfs(u+1,u+2);
return;
}
sc[u]+=3;
if(sc[u]>a[u]||(n-u)*3+sc[u]<a[u]);
else dfs(u,v+1);
sc[u]-=3;
sc[v]+=3;
if(sc[v]>a[v]||(n-u-1)*3+sc[v]<a[v]);
else dfs(u,v+1);
sc[v]-=3;
sc[u]++,sc[v]++;
if(sc[u]>a[u]||sc[v]>a[v]||(n-v)*3+sc[u]<a