zoukankan      html  css  js  c++  java
  • hdu 5100 Chessboard

    http://acm.hdu.edu.cn/showproblem.php?pid=5100

    在比赛时没看懂题就没看,结束之后,看了解题报告才知道怎么做。

    解题报告:

    首先,若n<k,则棋盘连一个1×k的矩形都放不下,输出0。
    我们只需要考虑nk的情况。将棋盘类似于黑白染色,按(i+j)k划分等价类,给每个格子标一个号。
    标号之后,会注意到每条从左下到右上的斜线数字都是相同的,那么对于s×s的格子,其内部数字有且恰好有2s1种,所以当s<=k2的时候,内部数字有floor(k2)21<k种,所以不能有更佳的方案。
    从而证明最优的方案一定是仅剩下一个s×s的正方形区域没有被覆盖到,其中sk2。
    而令l=n mod k之后,根据l大小的不同,可以构造出中心为l×l(kl)×(kl)的风车形图案,又通过上面证明这个l(或kl)就是之前的s,所以是最优的。
    所以令l=n mod k,如果lk2,最多可覆盖的格子数即为n2l2,否则为n2(kl)2,显然这样的方案是可以构造出来的(风车形)。

    这个题的一个论文:http://www.matrix67.com/blog/archives/5900
     1 #include<stdio.h>
     2 
     3 int main()
     4 {
     5     int t,n,k;
     6     while(scanf("%d",&t)!=EOF)
     7     {
     8         while(t--)
     9         {
    10             scanf("%d%d",&n,&k);
    11             if(n<k)
    12             {
    13                 printf("0
    ");
    14             }
    15             else
    16             {
    17                 int x=n%k;
    18                 if(x<=k/2)
    19                 {
    20                     printf("%d
    ",n*n-x*x);
    21                 }
    22                 else
    23                 {
    24                     printf("%d
    ",n*n-(k-x)*(k-x));
    25                 }
    26             }
    27         }
    28     }
    29     return 0;
    30 }
    View Code
     
  • 相关阅读:
    python requests模块
    python 模拟豆瓣登录(豆瓣6.0)
    python 抓取糗事百科糗图
    python bz2模块
    the python challenge闯关记录(9-16)
    python之PIL库(Image模块)
    python之zipfile
    python之pickle模块
    the python challenge闯关记录(0-8)
    KVO简介
  • 原文地址:https://www.cnblogs.com/fanminghui/p/4084104.html
Copyright © 2011-2022 走看看