ZOJ
文章平均质量分 60
ZuXu
这个作者很懒,什么都没留下…
展开
-
ZOJ 3601 Unrequited Love
注意到若存在两个人同时满足条件的话会推出矛盾,因此满足条件的只能有一个人。开始想到先利用被爱关系,把肯定不满足条件的人踢掉。若果剩下一个人,则判断他是否爱所有人,只见时间一直从0飙到16秒。其实是有线性的方法的,先假定第一个人a满足条件,从第二个人开始遍历。若b爱a或a不爱b,则把a置成b。被覆盖的那些肯定是不满足的条件的,而对于跳过的人,必定存在一个他不爱的人,这就是当时的a,不然,a就要等于他原创 2013-04-04 17:52:14 · 864 阅读 · 0 评论 -
浙江大学第13届程序设计竞赛总结
一大早被赛会给坑了,说是一个人不能领三人的证,于是不到八点就爬起来,屁颠屁颠地赶过去了。事实上由于人太多了,依然是一人领了三人的证。下午四个小时的比赛一晃而过,最终3 AC 1 TLE 1 Debugging 15 Rank,相对来说是个可以接受但略带遗憾的成绩。三月初刚开学的时候觉得很无聊,于是想做做ACM刺激一下,开始看了一些竞赛的基础知识。只不过依然很烦看书,后面还是直接转向刷题,首先是原创 2013-04-21 15:23:45 · 1147 阅读 · 0 评论 -
ZOJ 3591 & 3594
3591 Nim这题连基本的Nim都不告诉怎么,让比赛时没见过的情何以堪。#include #include using namespace std;typedef long long ll;int T, N, S, W;int a[1000001];inline void Generate(){ int g = S; ++ N; for(int i=1; i<N;原创 2013-04-07 21:12:24 · 659 阅读 · 0 评论 -
ZOJ 3598 Spherical Triangle
当时居然没想到转成直角坐标系计算,一搜居然发现有余弦公式:cosA = (cosa-cosb*cosc)/(sinb*sinc),果断用之。a, b, c是单位球下角A, B, C所对的弧长。#include #include #define torad(x) x=x/180*3.14159265358979323846#define todeg(x) x=x*180/3.1原创 2013-04-07 20:56:05 · 737 阅读 · 0 评论 -
ZOJ 3593 One Person Game
令c = a+b, d = A-B,则等价于求{|x|+|y| | ax+by=d || ax+cy=d || bx+cy=d}。对于ax+by=d,用扩展欧几里得算法求得axx+byy=gcd(a,b),是否有解可由d是否为gcd的倍数判断。若有解,原方程的一组解为(x0, y0) = (xx*d/gcd, yy*d/gcd)。令aa=a/gcd,bb=b/gcd,则通解可表示为(x0+k*b原创 2013-04-07 20:48:14 · 1024 阅读 · 0 评论 -
ZOJ 3596 Digit Number
看过像1136这类求最小倍数的题就知道,应该用BFS,逐渐构造从小到大的满足条件的数。另外根据条件以及余数,设置状态标记位,第一次达到该状态时进行置位,因为之后再到达同一状态时,其对应的数必然更大。另外内存充足,队列可以开得足够大,不要用循环的,因为输出结果时要用到之前的节点。开始将搜索的数直接用string保存在节点里,超时得一塌糊涂。后来在节点中保存了上一状态的下标,换成了数组做队列,又手原创 2013-04-07 15:28:55 · 854 阅读 · 0 评论 -
ZOJ 3607 Lazier Salesgirl
简单题,线性遍历一遍就好。但要注意如果ave(p)计算到第i个顾客为止,那么第i+1个顾客来到时必须睡着。#include #include int c[1001];int sum[1001];int T, n, p, t;int i, tmin, w;int main(){ double max, temp; scanf("%d", &T); while(原创 2013-04-04 13:59:03 · 652 阅读 · 0 评论 -
ZOJ 3605 Find the Marble
传说中的江湖赌骗术,能自己想到的dp都不是什么复杂的dp。用dp[i][j]k]表示前i次交换看漏j次最后猜k的可能排列数,递推时,若第i步看漏,则dp[i][j][k] += dp[i-1][j-1][k]。若第i步没看漏,则分两种情况:第i步的交换与k有关,另外一个是l,则dp[i][j][k] += dp[i-1][j][l];若无关,则dp[i][j][k] += dp[i-1][j]原创 2013-04-05 10:55:28 · 1086 阅读 · 0 评论 -
ZOJ 3604 Tunnel Network
开始想找递推公式,果然失败了。不过对于给定的n和s,可以对n-s个点先排列然后划分成s份,然后计算有x个点树有多少种。这样显然不好递推,也没法写公式。事实上对任意n个点构成的树对应一个长为n-2的Prufer序列,且这种关系是一一对应。所谓Prufer序列是每次拿掉编号最小的叶节点然后将它的父亲push,直到只剩下两个节点。因此可以假定有点0与s个城市分别相连,问题转化为这n+1个点构成的树的Pr原创 2013-04-04 22:03:44 · 1501 阅读 · 0 评论 -
ZOJ 3600 & 3603
两个简单题,但都是几遍才过的- -3600 Taxi Fare杭州公交涨价了,不过没关系,反正坐的少。当时新老价格不是分开算的,所以出现了舍入问题。#include int main(){ int T; int d, t; double o, n; scanf("%d", &T); while(T --) { scanf("%d%d", &d, &t)原创 2013-04-04 20:45:29 · 873 阅读 · 0 评论 -
ZOJ 3602 Count the Trees
开始以为子树不仅需要同构,还要每个节点的编号相等,然后发现测试样例怎么对不上的呢。于是看了解题报告,于是思路就暴露了。一个节点对应一颗子树,所以可以为每个节点映射一个整数,这个整数唯一体现了这颗子树的形态。显然这个整数可以递归地由两个孩子对应的整数确定,方便起见,我们把第一次碰到的子树(一个节点)编号为0,然后第二次遇到的编号为1,依次类推。由于写了两个类似的的DFS,调用的时候掉混了,这是第二次原创 2013-04-04 20:09:22 · 768 阅读 · 0 评论 -
ZOJ 1202 Divide and Count
高中排列组合题,以第一个case为例。方案数C(6, 3)*C(6-3, 3)/2! = 10,之所以要除2!是因为两个容量为3的箱子是对等的,故除去2的全排列。在第二个case中,则是C(6, 1)*C(6-1, 2)*C(6-1-2, 3) = 60。因为最大的数字可能是144,开始感觉还是挺麻烦的。不过看了AC的代码发现数据非常弱,虽然后面的数已经溢出了但没有相应的case。#inclu原创 2013-04-21 22:04:12 · 689 阅读 · 0 评论