BestCoder17 1001.Chessboard(hdu 5100) 解题报告
2014-11-09 11:17
477 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5100
题目意思:有一个 n * n 的棋盘,需要用 k * 1 的瓷砖去覆盖,问最大覆盖面积是多少。
比赛时不会做.............
hdu 题解:
首先,若n<k,则棋盘连一个1×k的矩形都放不下,输出0。
我们只需要考虑n≥k的情况。将棋盘类似于黑白染色,按(i+j)模k划分等价类,给每个格子标一个号。
标号之后,会注意到每条从左下到右上的斜线数字都是相同的,那么对于s×s的格子,其内部数字有且恰好有2s−1种,所以当s<=k2的时候,内部数字有floor(k2)∗2−1<k种,所以不能有更佳的方案。
从而证明最优的方案一定是仅剩下一个s×s的正方形区域没有被覆盖到,其中s ≤k2。
而令l = n mod k之后,根据l大小的不同,可以构造出中心为l×l或(k−l)×(k−l)的风车形图案,又通过上面证明这个l(或k−l)就是之前的s,所以是最优的。
所以令l = n mod k,如果l≤k2,最多可覆盖的格子数即为n2−l2,否则为n2−(k−l)2,显然这样的方案是可以构造出来的(风车形)。
其实我觉得这个题解更好看,热烈推荐下面这个:
View Code
题目意思:有一个 n * n 的棋盘,需要用 k * 1 的瓷砖去覆盖,问最大覆盖面积是多少。
比赛时不会做.............
hdu 题解:
首先,若n<k,则棋盘连一个1×k的矩形都放不下,输出0。
我们只需要考虑n≥k的情况。将棋盘类似于黑白染色,按(i+j)模k划分等价类,给每个格子标一个号。
标号之后,会注意到每条从左下到右上的斜线数字都是相同的,那么对于s×s的格子,其内部数字有且恰好有2s−1种,所以当s<=k2的时候,内部数字有floor(k2)∗2−1<k种,所以不能有更佳的方案。
从而证明最优的方案一定是仅剩下一个s×s的正方形区域没有被覆盖到,其中s ≤k2。
而令l = n mod k之后,根据l大小的不同,可以构造出中心为l×l或(k−l)×(k−l)的风车形图案,又通过上面证明这个l(或k−l)就是之前的s,所以是最优的。
所以令l = n mod k,如果l≤k2,最多可覆盖的格子数即为n2−l2,否则为n2−(k−l)2,显然这样的方案是可以构造出来的(风车形)。
其实我觉得这个题解更好看,热烈推荐下面这个:
http://www.matrix67.com/blog/archives/5900
#include<iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> using namespace std; int main() { int T, n, k; while (scanf("%d", &T) != EOF) { while (T--) { scanf("%d%d", &n, &k); if (n < k) printf("0\n"); else { int area = n * n; int remain = n % k; printf("%d\n", remain <= k/2 ? area-remain*remain : area-(k-remain)*(k-remain)); } } } return 0; }
View Code
相关文章推荐
- BestCoder5 1001 Poor Hanamichi(hdu 4956) 解题报告
- BestCoder19 1001.Alexandra and Prime Numbers(hdu 5108) 解题报告
- BestCoder3 1001 Task schedule(hdu 4907) 解题报告
- BestCoder20 1002.lines (hdu 5124) 解题报告
- BestCoder3 1002 BestCoder Sequence(hdu 4908) 解题报告
- BestCoder10 1001 Revenge of Fibonacci(hdu 5018) 解题报告
- BestCoder4 1002 Miaomiao's Geometry (hdu 4932) 解题报告
- BestCoder7 1002 Little Pony and Alohomora Part I(hdu 4986) 解题报告
- BestCoder8 1002 Revenge of Nim(hdu 4994) 解题报告
- BestCoder15 1002.Instruction(hdu 5083) 解题报告
- BestCoder13 1001.Beautiful Palindrome Number(hdu 5062) 解题报告
- BestCoder18 1002.Math Problem(hdu 5105) 解题报告
- hdu 4883 bestcoder round 2 1001 TIANKENG’s restaurant
- bestcoder#17 1001&&HDU 5100 Chessboard(数学)
- [BestCoder] Round #25 1001 - Harry and Magical Computer | HDU 5154
- BestCoder12 1001.So easy(hdu 5058) 解题报告
- HDU BestCoder 1001
- Bestcoder22 解题报告
- [Bestcoder] Round #27 1001、1002 | HDU 5162、5163
- hdu 4956 Poor Hanamichi(bestcoder Round 6 1001)