c++70分3TLE求改
查看原帖
c++70分3TLE求改
759152
yinbe楼主2023/7/6 13:16

提交记录

#include<iostream>
using namespace std;
string s[20];
bool flag[20][20]={0},l[100]={0},lx[100]={0},rx[100]={0};	
int n,cnt;
void Search(int x)
{
	if(x>n)
	{
		cnt++;
		return;
	}
	for(int i=1;i<=n;i++)
	{
		if(!l[i]&&!lx[i+x]&&!rx[x-i+n]&&!flag[x][i])
		{
			l[i]=true;
			lx[i+x]=true;
			rx[x-i+n]=true;
			Search(x+1);
			l[i]=false;
			lx[i+x]=false;
			rx[x-i+n]=false;
		}
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>s[i];
		int len=s[i].size();
		for(int j=0;j<len;j++)
		{
			if(s[i][j]=='.')
			{
				flag[i][j+1]=true;
			}
		}
	}
	Search(1);
	cout<<cnt;
    return 0;
}

试图用short减少时间,结果9WA 提交记录

#include<iostream>
using namespace std;
string s[20];
bool flag[20][20]={0},l[100]={0},lx[100]={0},rx[100]={0};	
short int n,a[20],i,j;
int cnt;
void Search(short int x)
{
	if(x>n)
	{
		cnt++;
		return;
	}
	for(i=1;i<=n;i++)
	{
		if(!l[i]&&!lx[i+x]&&!rx[x-i+n]&&!flag[x][i])
		{
			a[x]=i;
			l[i]=true;
			lx[i+x]=true;
			rx[x-i+n]=true;
			Search(x+1);
			l[i]=false;
			lx[i+x]=false;
			rx[x-i+n]=false;
		}
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(i=1;i<=n;i++)
	{
		cin>>s[i];
		short int len=s[i].size();
		for(j=0;j<len;j++)
		{
			if(s[i][j]=='.')
			{
				flag[i][j+1]=true;
			}
		}
	}
	Search(1);
	cout<<cnt;
    return 0;
}
2023/7/6 13:16
加载中...