60pts,2,8,9,10wa
查看原帖
60pts,2,8,9,10wa
1021995
Destroyer_S楼主2023/9/22 20:25
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
	typedef long long ll;
	typedef unsigned long long ull;
	int vis[20][20];
	ll x[100000000];
	ll a[20]; 
	char c1[20][20];
	ll oldsix;
	ll ti=0;
	void main2(int m,int c) 
	{
		if(m==oldsix+1)
		{
			ti++;	
			return ;
		}
		int d=c;
		while(d!=0)
		{
			int cnt=0;
			int e=d&(-d);
			d-=e;
			cnt=x[e];
			a[m]=cnt;
			if(vis[m][cnt]==0&&c1[m][cnt]=='*')
			{
				for(int i=m;i<=oldsix;i++)
				{
					vis[i][i-m+cnt]++;
					vis[i][cnt-i+m]++;
				}
				main2(m+1,c-e);
				for(int i=m;i<=oldsix;i++)
				{
					vis[i][i-m+cnt]--;
					vis[i][cnt-i+m]--;
				}		
			}
		}
	}
int main(){
	for(int i=0;i<=17;i++) x[(1<<i)]=i+1;
	cin>>oldsix;
	for(int i=1;i<=oldsix;i++)
	{
		for(int j=1;j<=oldsix;j++)
		{
			cin>>c1[i][j];
		}
	}
	int k=(1<<(oldsix))-1;
	main2(1,k);
	cout<<ti;
return 0;
}

求解

2023/9/22 20:25
加载中...