构造题
文章平均质量分 51
skajre
这个作者很懒,什么都没留下…
展开
-
HDU 5884 Sort(哈夫曼树+二分)
其实这是哈夫曼树,一开始用优先队列写超时,后来发现不用优先队列,因为每次相加后的值总是大于之前相加的,那么只需要用普通队列就可以了,而且这个队列是单调递增的,然后取原数组的头或者单调队列的头就可以了。 但是没有考虑到(n-1)%(k-1)==0,感觉这个条件比较难想,需要实现预处理合并一次。 感觉可以用数学归纳法得出。// // main.cpp // Richard // // Cre原创 2016-09-22 10:34:22 · 227 阅读 · 0 评论 -
UVA 1352 Colored Cubes(暴力搜索枚举)
一个正方体只要确认上顶面和前面的两个面就能被确定下来,那么上顶面有六种情况,在上顶面被确认的前提下,前面有四种情况,所以一个正方体通过旋转一共有24中姿态,只要把这可能的26种姿态的排列,打印出来,然后在主函数里枚举匹配即可。 下面是枚举可行排列的代码:#include #include #include #include using namespace std; int Left[6]={4,原创 2016-09-29 13:29:28 · 192 阅读 · 0 评论 -
UVA 11384 Help is needed for Dexter(构造题)
这题序列是递增的,出几组数据就很好推出来,剪掉中间的,那么后面的序列长度会和前面序列一样,那么数据范围马上变成1/2了。 // // main.cpp // Richard // // Created by 邵金杰 on 16/9/28. // Copyright © 2016年 邵金杰. All rights reserved. // #include #include #inc原创 2016-09-29 13:34:15 · 169 阅读 · 0 评论 -
UVA 11464 Even Parity(暴力枚举)
因为如果枚举全部点,肯定会超时,所以枚举第一行,然后根据第一行来算出接下来的n-1行,最后取最优就行。// // main.cpp // Richard // // Created by 邵金杰 on 16/9/28. // Copyright © 2016年 邵金杰. All rights reserved. // #include #include #include #inclu原创 2016-09-29 00:12:50 · 209 阅读 · 0 评论 -
UVA 10795 A Different Task(汉诺塔构造)*
首先找出最大的起始柱和目标柱不同的最大k,然后只要让接下来的k-1个盘子按顺序放到中间柱上就可以了。 然后因为放盘子是可逆的,具有对称性,所以分别从起始状态和结束状态往中间状态靠,然后起始到中间+结束所走的步数+k到目标状态的步数(1)就是最后的答案。 还有一个结论就是1~i-1的顺序的盘子放倒目标状态需要(1// // main.cpp // Richard // // Created原创 2016-09-29 21:31:12 · 197 阅读 · 0 评论 -
UVA 1335 Beijing Guards(二分+构造)
这题目偶数的结论可以很容易得出来,但是奇数很麻烦,自己想不出来,看的书上的解释,分成两个区间1-r[1],r[1]+1-p,然后第一个位置取左边的区间,接下来就是偶数尽量往左取,奇数尽量往右取,那么最后一个奇数位尽量往右取,只要它的元素全部都是右边的,没取左边的,那就成功了,所以left]n]==0表明当前定义的物品数目是符合要求,继续缩小范围即可,反之扩大范围。// // main.cpp /原创 2016-09-30 21:19:45 · 201 阅读 · 0 评论 -
UVA 1418 WonderTeam(假设)
这题目真是看的云里雾里。 #include using namespace std; int main() { int n; while(cin>>n) { if(n==0) break; if(n<=3) cout<<1<<endl; else if(n==4) cout<<2<<endl; else co原创 2016-10-06 20:03:53 · 199 阅读 · 0 评论