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. AngularJS入门基础——控制器

    AngularJS中的控制器是一个函数,用来向视图的作用域添加额外的功能.我们用它来给作用域对象设置初始状态,并添加自定义行为. AngularJS同其他JavaScript框架最主要的一个区别就是, ...

  2. Aho-Corasick 多模式匹配算法、AC自动机详解

    Aho-Corasick算法是多模式匹配中的经典算法,目前在实际应用中较多. Aho-Corasick算法对应的数据结构是Aho-Corasick自动机,简称AC自动机. 搞编程的一般都应该知道自动机 ...

  3. Python-Analysis-Malware

    Python恶意软件分析应用-PEfile 0x1.前言 要想对恶意代码快速分析,Python是一门必须要掌握的编程技能.因为它是跨平台的,而且容易阅读和编写.许多开源安全工具也是用Python写的. ...

  4. 【黑客免杀攻防】读书笔记10 - switch-case分支

    0x1 switch-case分支 switch-case其实就是if-else语句的另一种体现形式.但大于3之后的switchc-case.编译器会对代码进行优化. 1.1 简单switch-cas ...

  5. Apache+jboss群集优化

    故障现象: 俩台服务器jboss做的Apache群集,之前优先访问A,造成大量session都在A上有报警. 调整 调整Apache 配置jboss集群参数,将Node2的worker.node2.l ...

  6. 获取同一接口多个实现类的bean

    @Service("taskExecutorFactory") public class TaskExecutorFactory implements ApplicationCon ...

  7. tensorflow中的kernel/Adam 变量的来源

    原因是使用Adam优化函数时,Adam函数会创建一个Adam变量,目的是保存你使用tensorflow创建的graph中的每个可训练参数的动量, words/_word_embeddings:0 bi ...

  8. JQ实现弹幕效果

    JQ实现弹幕效果,快来吐糟你的想法吧 效果图: 代码如下,复制即可使用: <!DOCTYPE html> <html> <head> <meta charse ...

  9. Linux系统运维笔记(二),Linux文件编辑命令

    Linux系统运维笔记 Linux文件编辑命令 首先我们使用命令 vi filename 打开一个文件,这个时候进入到的是命令模式 接下来我们按i,然后键盘随便输入写内容. 然后按ESC重新进入到命令 ...

  10. Angular快速学习笔记(2) -- 架构

    0. angular 与angular js angular 1.0 google改名为Angular js 新版本的,2.0以上的,继续叫angular,但是除了名字还叫angular,已经是一个全 ...