TLE 80pts 求助 吸了氧气
查看原帖
TLE 80pts 求助 吸了氧气
793689
Ancap楼主2023/8/16 10:18
#include<bits/stdc++.h>
using namespace std;
#define XL_size 100000001
#define large_size 10000001
#define big_size 400001
#define _size_ 200001
#define mid_size 100001
#define small_size 10001
#define mini_size 5001
#define micro_size 2001
int n,arr[100],vis1[100]/*列*/,vis2[100]/*主对角线*/,vis3[100]/*副对角线*/,vis4[100][100],cnt;
char temp;
void dfs(int r)
{
	if(r>n)
	{
		cnt++;
		return;
	}
	for(int j=1;j<=n;j++)
	{
		if(!vis1[j]&&!vis2[r-j+n]&&!vis3[r+j]&&!vis4[r][j])
		{
			arr[r]=j;
			vis1[j]=1;
			vis2[r-j+n]=1;
			vis3[r+j]=1;
			vis4[r][j]=1;
			dfs(r+1);
			vis1[j]=0;
			vis2[r-j+n]=0;
			vis3[r+j]=0;
			vis4[r][j]=0;
			arr[r]=0;
		}
	}
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>temp;
			if(temp=='.') vis4[i][j]=1;
		}
	}
	dfs(1);
	cout<<cnt;
}

提交记录 看有个位运算的tag,但是本蒟蒻不知道怎么用位运算来优化

2023/8/16 10:18
加载中...