
ZOJ Monthly
文章平均质量分 66
ZuXu
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ZOJ 3689 D Digging
虽然一看就是DP问题,但是每个Coffin是唯一的,修了一次就不能再修了。这样更新每个时间对应的最高赏金时要考虑那些Coffin还没修的问题,这就很麻烦了。但事实上,对于一个最优的安排中修建的Coffin,是有严格的时间先后顺序的。考虑Coffin a & b,在任意相同时间t下,先a后b与先b后a所能获得的赏金分别是 t*a.s + (t-a.t)*b.s & t*b.s + (t-b.t)原创 2013-04-01 12:43:16 · 930 阅读 · 0 评论 -
ZOJ 3686 A A Simple Tree Problem
开始想了一个错误的算法,对每个节点保存它的子树中的节点数目和其中为一的数目,操作某节点时向上更新其祖先的数据(log N),查询时直接输出。当时忽略了操作同时也需要更新后代的数据,这样的最坏复杂度是N,肯定是不行的。但直接交上去不是WA而是超时,由此猜想其中有类似链表的数据。这个问题可以用线段树很好地解决,在对原树进行先序遍历的同时标上序号后,可以将任意子树转化为区间。序号介于某节点到它的任意原创 2013-04-02 22:19:36 · 879 阅读 · 0 评论 -
ZOJ Monthly March 2013 E & H
这是第二次参加ZOJ月赛吧,两次都是为了准备校赛。第一次也是去年的这个时间,三个人去了机房,用个把小时看完题后,走了两个。我多呆了半个小时,终于忍受不了机房的键盘鼠标声和题目的复杂程度,也离开了。在刷这次月赛前,做了一下上次月赛的题目,能A四五道,心中窃喜。果然运气成分还是很大的,若没有与人讨论,今次恐怕又是鸭蛋。H 3693 Happy Great BG简单题,但是出题者神思路原创 2013-03-31 22:08:14 · 1121 阅读 · 4 评论 -
ZOJ 3684 Destroy
首先中心应当位于整棵树的直径上,先从任意点开始搜一条最长路径,该路径的终点必是直径的一段,以上结论由反证可推出矛盾。再从端点开始深搜可得直径,遍历该路径即可得到中心点所在。接下来以中心点为根节点,开始DP即可。#include #include #include using namespace std;#define it map::iteratorstruct roa原创 2013-03-27 21:34:59 · 805 阅读 · 0 评论 -
ZOJ 3681 E - Cup 2
又是DP问题,又是内存不够,可惜这道题却能用map过掉。将M分解成a*b,则dp[M]=min(dp[a]*(b/2+1), dp[b]*(a/2+1))。(a|b)/2+1是level1中最少支持意大利的组数。#include #include using namespace std;map mem;int dp(int num){ int& res = mem原创 2013-03-26 00:29:31 · 849 阅读 · 0 评论 -
ZOJ 3682 E - Cup 3
二维DP,用a[i][j]表示前i个广场容纳j个球迷的方案数,这里的球迷或为Barcelona,或为Madrid。由于题目保证两队人数与广场总容量相等,则可选择人数较少的队DP。不过这样的话用来存储中间结果的二维数组过大,为200*100000*4Byte,刚好约是内存限制的1.25倍。开始想用map<pair<int, int>, int>节约内存,结果超时,故而重新用滚动数组写了一遍。原创 2013-03-25 22:30:00 · 904 阅读 · 0 评论 -
ZOJ 3678 The Toy of Flandre Scarlet
题目大意是有L*W*H个1*1*1的小方块,堆成长L,宽W,高H的玩具。每个小方块上有一个数字,每次我们可以让某相邻的两个小方块,同时加上或减去一个相同的数字。问经过若干步后能不能使所有数字均为0。显然可以转化成图来考虑。假设A, B, C, D依次相邻,分别对应1,2,3,4。经过三次操作,AB-1,BC+1, CD-1,可使D=D-A,A=0;通过两次操作,BC-2,CD+2,可使D=D+原创 2013-03-25 19:43:07 · 3760 阅读 · 0 评论 -
ZOJ 3688 C The Review Plan II
据说是错排公式的扩展,叫做限位排列。递推公式如下:但是因为对1000000007取了模,所以其中的除法不一定能除尽,当然在数学意义上是能够除尽的。可以用费马小定理去掉除法:若P为质数,则 a^p = a mod P,即 a^(p-1) = 1 mod P。但是这样一来式中会出现三项相乘,用long long计算是必须的,此外每乘一次要取模,否则long long原创 2013-04-05 23:00:49 · 1422 阅读 · 0 评论 -
ZOJ 3687 B The Review Plan I
因为限制数M比较小,可以直接对不满足条件的情况进行搜索。若某次搜索的结果中有违反了k个限制,则这样的排列数为(n-k)!,再根据k的奇偶性,判断是应当加还是减。当k为0时显然要取加号,于是k为奇时取减号。#include #include #define Mod 55566677bool got[51][51], use[51][2];int st[25][2], n,原创 2013-04-03 19:01:18 · 977 阅读 · 0 评论 -
ZOJ 3725 Painting Storages
采用递推:当NM时,若1到N-1满足条件,则N可以任意染色,方案数为C(N-1)*2;否则,必有1到N-M-1不满足条件,N-M为蓝,N-M+1到N-1为红,这时将N染成红色即可,方案数为2^(N-M-1)-C(N-M-1),即1到N-M-1所有的染色方案数减去满足条件的方案数。#include #include #define mod 1000000007typedef long lo原创 2013-07-21 22:31:59 · 985 阅读 · 0 评论