70分,TLE3个悬关求助

P1562 还是 N 皇后

试试 ```cpp #include<bits/stdc++.h> using namespace std; int a[100],b2[100],b1[100],b3[100],n,ans=0; bool f[1000][1000]; void dfs(int x) { if(x>n) { ans++; return ; } for(int i=1;i<=n;i++) { if(b1[i]==0&&b2[x+i]==0&&b3[x-i+15]==0&&f[x][i]==0) { a[x]=i; b1[i]=1; b2[x+i]=1; b3[x-i+15]=1; dfs(x+1); b1[i]=0; b2[x+i]=0; b3[x-i+15]=0; } } } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; char ch; /**/for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>ch; if(ch=='.') { f[i][j]=1; } } }/**/ dfs(1); cout<<ans; return 0; } ```
by gsc15759915601 @ 2023-07-18 09:12:46


加了 ```cpp ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); ``` 可以提很多速。
by gsc15759915601 @ 2023-07-18 09:14:06


没用(悲
by Zsy__rnfmabj @ 2023-07-18 09:36:32


``` for(int i=1;i<=n;i++) { if(b1[i]==0&&b2[x+i]==0&&b3[x-i+15]==0&&f[x][i]==0) { a[x]=i; b1[i]=1; b2[x+i]=1; b3[x-i+15]=1; dfs(x+1); b1[i]=0; b2[x+i]=0; b3[x-i+15]=0; } } ``` 这个循环太慢了,用位运算优化,lowbit查找很快的
by Da_capo @ 2023-07-20 10:44:16


Ok,已关
by Zsy__rnfmabj @ 2023-07-20 13:25:29


|