社区讨论

求助最后一个吸氧能过不吸氧TLE

P1219[USACO1.5] 八皇后 Checker Challenge参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@loc80qz4
此快照首次捕获于
2023/10/30 09:28
2 年前
此快照最后确认于
2023/11/04 20:28
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int A[15][15],n,ans,R[5][15];
vector <int> q;
void fang(int x,int y)
{
	for(int i=1;i<=n;i++)	A[x][i]++,A[i][y]++;
	for(int i=1;i<=n;i++)
	{
		if(x+i<=n&&y+i<=n)A[x+i][y+i]++;
		if(x-i>=1&&y-i>=1)A[x-i][y-i]++;
		if(x+i<=n&&y-i>=1)A[x+i][y-i]++;
		if(x-i>=1&&y+i<=n)A[x-i][y+i]++;
	}
}
void na(int x,int y)
{
	for(int i=1;i<=n;i++)	A[x][i]--,A[i][y]--;
	for(int i=1;i<=n;i++)
	{
		if(x+i<=n&&y+i<=n)A[x+i][y+i]--;
		if(x-i>=1&&y-i>=1)A[x-i][y-i]--;
		if(x+i<=n&&y-i>=1)A[x+i][y-i]--;
		if(x-i>=1&&y+i<=n)A[x-i][y+i]--;
	}	
}
void search(int r,int t)
{
	if(t==n+1)	
	{
		if(ans<3)
		{
			for(int i=0;i<q.size();i++)	R[ans][i]=q[i];
		}
		ans++;
	}
	else
	{
		for(int i=1;i<=n;i++)
		{
			if(A[i][t]!=0)	continue;
			fang(i,t);
			q.push_back(i);
			search(r,t+1);
			na(i,t);
			q.pop_back();
		}
	}
}
int main()
{
	cin>>n;
	search(n,1);
	for(int i=0;i<=2;i++)
	{
		for(int j=0;j<n;j++)
		{
			cout<<R[i][j]<<" ";
		}
		cout<<endl;
	}
	cout<<ans;
	return 0; 
}

回复

1 条回复,欢迎继续交流。

正在加载回复...