首页 > 其他分享 >BZOJ 4809(皇后-N皇后)

BZOJ 4809(皇后-N皇后)

时间:2022-10-24 18:03:56浏览次数:57  
标签:ch return 4809 ll long 皇后 define BZOJ


Description

众所不知,rly现在不会玩国际象棋。但是,作为一个OIer,rly当然做过八皇后问题。这里再啰嗦几句,皇后可以攻击到同行同列同对角线,在n*n的方格中摆n个皇后使其互不攻击到,求不同的解的数量,这就是经典的n皇后问题。现在问题推广到n皇后问题,这个问题对于你而言实在是小菜一叠。但因为上一次rly把棋盘弄破了,又拿不出新的,所以rly打算难一点点,问题就是破棋盘上的n皇后问题。他想知道……(你们懂的)。
棋子都是相同的。
Input

一行,一个正整数N。
接下来N行,每行N个数,要么为0,表示没坏,要么1,表示坏了。
N<=16
Output

一行,输出不同的解的数量。
Sample Input

4

1 0 1 1

1 1 1 0

0 1 1 1

1 1 0 1

Sample Output

1
HINT

Source

By FancyCoder

就是个n皇后,注意常数写小

#include<bits/stdc++.h> 
using namespace std;
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
For(j,m-1) cout<<a[i][j]<<' ';\
cout<<a[i][m]<<endl; \
}
#pragma
#define
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{
int x=0,f=1; char ch=getchar();
while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
return x*f;
}

#define
int a[MAXN][MAXN]={};
bool b[MAXN]={},b1[MAXN<<1]={},b2[MAXN<<1]={};
int ans=0,n;
void dfs(int l) {
if (l>n) {
++ans;return;
}
For(i,n) if (!a[l][i]&&!b[i]&&!b1[i+l]&&!b2[i-l+n]){
b[i]=b1[i+l]=b2[i-l+n]=1;
dfs(l+1);
b[i]=b1[i+l]=b2[i-l+n]=0;
}
}
int main()
{
// freopen("bzoj4809.in","r",stdin);
// freopen(".out","w",stdout);
n=read();
For(i,n) For(j,n) a[i][j]=read();
dfs(1);
cout<<ans<<endl;
return 0;
}


标签:ch,return,4809,ll,long,皇后,define,BZOJ
From: https://blog.51cto.com/u_15724837/5790753

相关文章

  • BZOJ 4800([Ceoi2015]Ice Hockey World Championship-meet in the middle)
    Description有n个物品,m块钱,给定每个物品的价格,求买物品的方案数。Input第一行两个数n,m代表物品数量及钱数第二行n个数,代表每个物品的价格n<=40,m<=10^18Output一行一......
  • BZOJ 4808(马-二分图最大独立集)
    4808:马TimeLimit:10SecMemoryLimit:128MBSubmit:111Solved:46[Submit][Status][Discuss]Description众所周知,马后炮是中国象棋中很厉害的一招必杀技......
  • BZOJ 4807(車-高精度)
    Description众所周知,車是中国象棋中最厉害的一子之一,它能吃到同一行或同一列中的其他棋子。車跟車显然不能在一起打起来,于是rly一天又借来了许多许多的車在棋盘上摆了起......
  • BZOJ 4805(欧拉函数求和-杜教筛)
    Description给出一个数字N,求sigma(phi(i)),1<=i<=NInput正整数N。N<=2*10^9Output输出答案。SampleInput10SampleOutput32HINT杜教筛入门#include<bits/stdc++......
  • BZOJ 4810([Ynoi2017]由乃的玉米田-莫队)
    Description由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美。这排玉米一共有N株,它们的高度参差不齐。由乃认为玉米田不美,所以她决定出个数据结构题这个题是这......
  • BZOJ 3503([Cqoi2014]和谐矩阵-gauss消元)
    Description我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1。一个元素相邻的元素包括它本身,及他上下左右的4个元素(如果存在)。给定矩阵的行数和......
  • bzoj 2301: [HAOI2011]Problem b mobius反演 RE
    ​​http://www.lydsy.com/JudgeOnline/problem.php?id=2301​​设f(i)为在区间[1,n]和区间[1,m]中,gcd(x,y)=i的个数。设F(i)为在区间[1,n]和区间[1,m]中,gcd(x,y)%......
  • 回溯法实现N皇后问题
    #include<iostream>#defineN5usingnamespacestd;//回溯法实现N皇后问题voidplace(int*x,intn){  for(inti=1;i<N;++i){    intifPlace=1; ......
  • 八皇后——回溯法
    八皇后问题(英文:Eightqueens),是由国际象棋棋手马克斯·贝瑟尔于1848年提出的问题,是回溯算法的典型案例。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用......
  • 843 n皇后
    用深度优先解决n皇后问题(一条路走到黑不行再换路)#include<bits/stdc++.h>usingnamespacestd;constintN=20;charg[N][N];......