比赛 Asm_Def战记之透明计算网络 评测结果 ATATWWWWWW
题目名称 Asm_Def排兵布阵 最终得分 20
用户昵称 CSU_Turkey 运行时间 2.350 s
代码语言 C++ 内存使用 0.31 MiB
提交时间 2017-08-29 20:00:54
显示代码纯文本
#include<bits/stdc++.h>//默默写40分 
using namespace std;
int k,a[20],n,b[20],ans=0,vis[20],m,p[20],q[20];
bool judge(){
	int last[20];
	memset(last,0,sizeof(last));
	for(int i=n;i>=1;i--){
		if(!last[b[i]])
		last[b[i]]=i;
	}
	for(int i=1;i<k;i++)
	if(last[i+1]<last[i])
	return 0;
	return 1;
}
void dfs(int x){
	if(x==n){
		if(judge()){
			ans++;
		}
		return ;
	}
	for(int i=1;i<=n;i++){
		if(vis[i])continue;
		vis[i]=1;
		b[++m]=a[i];
		dfs(x+1);
		m--;
		vis[i]=0;
	}
}
int main()
{
	freopen("asm_formation.in","r",stdin);
	freopen("asm_formation.out","w",stdout);
//	freopen("1.txt","r",stdin);
	scanf("%d",&k);
	p[0]=1;
	for(int i=1;i<=15;i++){
		p[i]=p[i-1]*i;
	}
	for(int i=1;i<=k;i++){
		scanf("%d",&q[i]);
		int o=q[i];
		while(o--){
			a[++n]=i;
		}
	}
	dfs(0);
	for(int i=1;i<=k;i++){
		ans/=p[q[i]];
	}
	cout<<ans;
	return 0;
}