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

  • 相关阅读:
    第九周实验总结
    第八周总结
    第七周课程总结&实验报告
    第六周java学习总结
    第五周编程总结
    第四周课程总结
    第三周课程总结实验报告
    java学习总结
    2019春总结作业
    pta编程总结1
  • 原文地址:https://www.cnblogs.com/yousiki/p/6287628.html
Copyright © 2011-2022 走看看