zoukankan      html  css  js  c++  java
  • BZOJ 3101: N皇后

    3101: N皇后

    Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special Judge
    Submit: 178  Solved: 94
    [Submit][Status][Discuss]

    Description

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

    Input

    一个数n

     

    Output

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

     

    Sample Input

    4

    Sample Output

    2
    4
    1
    3



    HINT

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

    Source

     
    [Submit][Status][Discuss]

    本来以为是道搜索好题,看到N的范围瞬间Mengbi,∑( 口 ||

    然后猜测应该不是搜索吧(废话,这大小摆明了是O(N)好嘛),就问了下度娘,说是有$O(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为奇数)

     1 #include <cstdio> 
     2 #define p(a) printf("%d
    ", a)
     3 #define f(a,b) for(int i=a;i<=b;i+=2)p(i)
     4 
     5 signed main(void)
     6 {
     7     int n; scanf("%d", &n);
     8     
     9     if (n % 6 != 2 && n % 6 != 3)
    10     {
    11         f(2,n);
    12         f(1,n);
    13     }
    14     else
    15     {
    16         int k = n >> 1;
    17         
    18         if (k & 1)
    19         {
    20             f(k,n-1);
    21             f(1,k-1);
    22             f(k+3,n);
    23             f(2,k+1);
    24         }
    25         else
    26         {
    27             f(k,n);
    28             f(2,k-1);
    29             f(k+3,n-1);
    30             f(1,k+1);
    31         }
    32         if (n & 1)p(n);
    33     }
    34 }

    @Author: YouSiki

  • 相关阅读:
    OleDbCommand 的用法
    递归求阶乘
    C#重写窗体的方法
    HDU 5229 ZCC loves strings 博弈
    HDU 5228 ZCC loves straight flush 暴力
    POJ 1330 Nearest Common Ancestors LCA
    HDU 5234 Happy birthday 01背包
    HDU 5233 Gunner II 离散化
    fast-IO
    HDU 5265 pog loves szh II 二分
  • 原文地址:https://www.cnblogs.com/yousiki/p/6287628.html
Copyright © 2011-2022 走看看