3101: N皇后

题目连接:

http://www.lydsy.com/JudgeOnline/problem.php?id=3101

Description

n*n的棋盘,在上面摆下n个皇后,使其两两间不能相互攻击….

Input

一个数n

Output

第i行表示在第i行第几列放置皇后

Sample Input

4

Sample Output

2

4

1

3

Hint

100%的数据3<n<1000000。输出任意一种合法解即可

题意

题解:

不要问我这结论哪儿来的,我也不知道

以下是找到的N皇后一组解得构造法:

一、当n mod 6 != 2 或 n mod 6 != 3时,有一个解为:

2,4,6,8,...,n,1,3,5,7,...,n-1 (n为偶数)

2,4,6,8,...,n-1,1,3,5,7,...,n (n为奇数)

(上面序列第i个数为ai,表示在第i行ai列放一个皇后;... 省略的序列中,相邻两数以2递增。下同)

二、当n mod 6 == 2 或 n mod 6 == 3时,

(当n为偶数,k=n/2;当n为奇数,k=(n-1)/2)

k,k+2,k+4,...,n,2,4,...,k-2,k+3,k+5,...,n-1,1,3,5,...,k+1 (k为偶数,n为偶数)

k,k+2,k+4,...,n-1,2,4,...,k-2,k+3,k+5,...,n-2,1,3,5,...,k+1,n (k为偶数,n为奇数)

k,k+2,k+4,...,n-1,1,3,5,...,k-2,k+3,...,n,2,4,...,k+1 (k为奇数,n为偶数)

k,k+2,k+4,...,n-2,1,3,5,...,k-2,k+3,...,n-1,2,4,...,k+1,n (k为奇数,n为奇数)

代码

#include<bits/stdc++.h>
using namespace std; int main()
{
int n;scanf("%d",&n);
if(n%6!=2&&n%6!=3)
{
for(int i=2;i<=n;i+=2)
printf("%d\n",i);
for(int i=1;i<=n;i+=2)
printf("%d\n",i);
return 0;
}
else
{
int k=n/2;
if(k%2==0&&n%2==0)
{
for(int i=k;i<=n;i+=2)
printf("%d\n",i);
for(int i=2;i<=k-2;i+=2)
printf("%d\n",i);
for(int i=k+3;i<=n-1;i+=2)
printf("%d\n",i);
for(int i=1;i<=k+1;i+=2)
printf("%d\n",i);
}
else if(k%2==0&&n%2==1)
{
for(int i=k;i<n;i+=2)
printf("%d\n",i);
for(int i=2;i<=k-2;i+=2)
printf("%d\n",i);
for(int i=k+3;i<=n-2;i+=2)
printf("%d\n",i);
for(int i=1;i<=k+1;i+=2)
printf("%d\n",i);
printf("%d\n",n);
}
else if(k%2==1&&n%2==0)
{
for(int i=k;i<n;i+=2)
printf("%d\n",i);
for(int i=1;i<=k-2;i+=2)
printf("%d\n",i);
for(int i=k+3;i<=n;i+=2)
printf("%d\n",i);
for(int i=2;i<=k+1;i+=2)
printf("%d\n",i);
}
else
{
for(int i=k;i<=n-2;i+=2)
printf("%d\n",i);
for(int i=1;i<=k-2;i+=2)
printf("%d\n",i);
for(int i=k+3;i<=n-1;i+=2)
printf("%d\n",i);
for(int i=2;i<=k+1;i+=2)
printf("%d\n",i);
printf("%d\n",n);
}
}
}

BZOJ 3101: N皇后 构造的更多相关文章

  1. bzoj 3101 N皇后构造一种解 数学

    3101: N皇后 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 70  Solved: 32[Submit][S ...

  2. BZOJ 3101: N皇后

    3101: N皇后 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 178  Solved: 94[Submit][ ...

  3. 3101: N皇后

    3101: N皇后 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 88  Solved: 41[Submit][S ...

  4. bzoj 2530 [Poi2011]Party 构造

    2530: [Poi2011]Party Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 364  Solved:  ...

  5. BZOJ 2217: [Poi2011]Lollipop 构造 + 思维

    Description 有一个长度为n的序列a1,a2,...,an.其中ai要么是1("W"),要么是2("T").现在有m个询问,每个询问是询问有没有一个连 ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. acm算法模板(1)

    1. 几何 4 1.1 注意 4 1.2 几何公式 4 1.3 多边形 6 1.4 多边形切割 9 1.5 浮点函数 10 1.6 面积 15 1.7 球面 16 1.8 三角形 17 1.9 三维几 ...

  8. ACM-ICPC竞赛模板

    为了方便打印,不再将代码放到代码编辑器里,祝你好运. ACM-ICPC竞赛模板(1) 1. 几何 4 1.1 注意 4 1.2 几何公式 4 1.3 多边形 6 1.4 多边形切割 9 1.5 浮点函 ...

  9. ACM主要算法

    ACM主要算法ACM主要算法介绍 初期篇 一.基本算法(1)枚举(poj1753, poj2965)(2)贪心(poj1328, poj2109, poj2586)(3)递归和分治法(4)递推(5)构 ...

随机推荐

  1. bzoj千题计划221:bzoj1500: [NOI2005]维修数列(fhq treap)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1500 1.覆盖标记用INF表示无覆盖标记,要求可能用0覆盖 2.代表空节点的0号节点和首尾的两个虚拟 ...

  2. XHR工厂的实现

    ajax这种常见的开发模式已经遍布我们日常的开发之中了,ajax本质还是采用一种轮询的模式,就是隔一段时间去发送一次http请求,获取数据,然后显示在页面之上,当然,ajax比起新兴的WebScoke ...

  3. JavaScript1.6数组新特性和JQuery的几个工具方法

    JavaScript 1.6 引入了几个新的Array 方法,具体的介绍见:New in JavaScript 1.6 .这些方法已经被写进了ECMA262 V5.现代浏览器(IE9/Firefox/ ...

  4. js如何用json 读取C#的Dictionary

    1. .net中Controller里面的方法 /// <summary> /// 流程图 /// </summary> /// <returns>返回对象Json ...

  5. Xgboost理解

    一.xgboost模型函数形式 xgboost也是GBDT的一种,只不过GBDT在函数空间进行搜索最优F的时候,采用的是梯度下降法也就是一阶泰勒展开:而xgboost采用的是二阶泰勒展开也就是牛顿法, ...

  6. 洛谷 P5089: CodeForces #500 (Div. 1) B / 1012B : Chemical table

    题目传送门:洛谷P5089. 题意简述: 一张 \(n \times m\) 的表格,有一些格子有标记,另外一些格子没有标记. 如果 \((r_1,c_1),(r_1,c_2),(r_2,c_1)\) ...

  7. 管中窥豹:从Page Performance看Nand Flash可靠性【转】

    转自:https://blog.csdn.net/renice_ssd/article/details/53332746 如果所有的page performace在每次program时都是基本相同的, ...

  8. KVM -> 虚拟化简介&虚拟机安装_01

    什么是虚拟化? 在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU.内存.磁盘空间.网络适配器等),予以抽象.转换后呈现 ...

  9. vue里面使用Velocity.js

    英文文档:http://velocityjs.org/ https://github.com/julianshapiro/velocity 中文手册(教程):http://www.mrfront.co ...

  10. jenkins主从从服务器发布脚本执行成功但总提示失败 FATAL: Remote call on XXXX failed

    主从jenkins当调用 slave 执行编译脚本后提示如下错误,找了半天怎么也没有问题,后来忽然发现slave上java的版本和master不同,一个 1.8 一个 1.10,将slave降回1.8 ...