
算法设计——构造法
文章平均质量分 75
XDU_Skyline
Everything is over, everything is just beginning.
展开
-
#140 (div.1) B. Naughty Stone Piles
1.题目描述:点击打开链接2.解题思路:本题利用贪心法解决。根据题意描述,我们知道最终的答案是和摆放顺序无关的,而费用要尽量小,因此直观上的感觉是尽量取小堆放在大堆上。这里我们试图利用递归的思想来解决本题。首先,假设这n个石子已经由小到大排序,当k=n-1时,只需要把前n-1个石子都摞到第n个石子上即可。那么,当k=n-2时该怎么办呢?我们还想办法把它变成之前的简单情况,即变为第n个石原创 2015-06-01 13:22:00 · 668 阅读 · 0 评论 -
Looksery Cup 2015 G. Happy Line
1.题目描述:点击打开链接2.解题思路:本题利用贪心法解决。不过贪心的思想却是非常巧妙的。想象有一个阶梯,第n个人的阶梯高度是1,然后第n-1个人的阶梯高度是2,第1个人的阶梯高度是n。程序中用base[i]表示第i位的阶梯高度。注意:题目中,“前面”只的是序号大的,“后面”指的是序号小的。那么,如果一个人沿着阶梯下降,说明他在往前移动;反之则是在往后移动。由于不管怎么交换,最终想要达到的状态原创 2015-06-18 18:40:23 · 578 阅读 · 0 评论 -
#306 (div.2) D. Regular Bridge
1.题目描述:点击打开链接2.解题思路:本题属于一道图论的构造题。要求构造出一张无向图,其中所有的顶点的度数均为k,且至少含有一个桥。这道题在比赛时候没有任何思路,因为始终想象不出来k>1的情况。比赛结束后终于尝试画出了k=3的情况。然后摸索出来了做题方法。首先,对于k等于偶数的情况,一定是不存在解的。假设顶点0是桥的一个端点,那么将桥断开后,它和所在的连通分量的2m-1个点相连(设k=2原创 2015-06-09 18:52:29 · 757 阅读 · 0 评论 -
#298 (div.2) D. Handshakes
1.题目描述:点击打开链接2.解题思路:本题是一道模拟题。要求找出一个队列,使得队列中的每个人的握手次数符合输入的情况,如果不存在输出无解。其中每三个人可以在任何时刻组成一个队伍开始比赛,后面的人不能再与他们握手。通过手动操作与观察可以发现,如果把队列中的人的握手次数均取除以3后的余数。那么正好形成0 1 2 0 1 2....的循环序列。所以可以通过这个来模拟该过程。事先用map保存握手次数原创 2015-04-13 19:10:26 · 493 阅读 · 0 评论 -
#292 (div.2) D.Drazil and Tiles
1.题目描述:点击打开链接2.解题思路:本题一开始迟迟没有好的思路,随后通过思考,发现应该用贪心法解决:首先应该着力填充周围只有一个空格的点,随后以它的空格为中心,再不断向外拓展,直到整个界面被填充。这样便解决了本题。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#include#include#i原创 2015-03-02 12:11:04 · 851 阅读 · 0 评论 -
#298 (div.2) A. Exam
1.题目描述:点击打开链接2.解题思路:本题利用构造法解决。对于n≤3的情况可以特判一下。对于大于3的情况,可以让前一半都是偶数,后一半都是奇数即可。因为相邻的两个奇数或偶数的间隔都是2,满足题意。3.代码:#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#include#include#inc原创 2015-06-09 20:05:33 · 551 阅读 · 0 评论 -
#300 (div.1 2) B. Quasi Binary
1.题目描述:点击打开链接2.解题思路:本题利用扫描法解决。一开始想复杂了,把所有的01组成的数字全部都列举了出来,想一个个尝试。结果到最后也没能写成,放弃了。比赛后发现思路其实非常简单。把每一位的数字看做一根柱子的高度,逐层扫描即可。如果第j位的数字大于当前层i,那么这一位设置为1,否则设置为0。可以发现,最终的答案就是输入的数字中最大的那一位数,而设置每一位的值恰好可以利用string来方原创 2015-04-27 13:39:58 · 780 阅读 · 0 评论 -
ZOJ 3810 A Volcanic Island (2014年牡丹江赛区网络赛B题)
1.题目描述:点击打开链接2.解题思路:本题是四色定理的模板题,不过有几种情况要提前特判一下:n==1直接输出,13.代码:#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#include#include#include#include#include#include#include#原创 2015-08-18 11:21:33 · 812 阅读 · 0 评论 -
HDU 5491 The Next (2015年合肥赛区网络赛H题)
1.题目描述:点击打开链接2.解题思路:本题要求找一个尽量小的数字,使得它大于D,且二进制表示中1的个数在区间[s1,s2]中。比赛时候想了好久,终于想到一个比较诡异的做法:如首先把D分解成二进制并把每一位都放到数组base中,并用num来统计当前1的个数。如果最低位是0,那么先把它变成1,并检查此时1的个数是否符合要求。接下来,开始不停地寻找形如”11..1110“的序列,并把这段全部取反,原创 2015-09-28 10:39:14 · 743 阅读 · 0 评论