ZOJ Monthly, October 2010 题解

尽管比赛的时候还是很多题不会做。。不过上了nimendongde这个号看了lichao神犇和gaoxin神犇的程序之后。。总算全部都会了囧。。。
Orz Sro Orz gaoxin&lichao神犇
A,纯模拟题。。直接上就好了。。但是我一开始用cin TLE,然后改成C的后不知道哪里写二了WA囧。。
最后是gaoxin神犇做的。。我太弱了囧。。。
B,纯数学题,我一开始做WA,最后是lichao神犇A的囧。。
设上面切了A次,侧面切了B次,克隆了C次,
那么A+B+C=M
(A==0?1:2A)*(B+1)+C=N
若A为0,那么得到N=M+1。。显然此时答案为0。。
若N<M+1。。那么由于每次操作之后块数增加。。。显然是无解的。。。
那么现在A>0
解得:
2*A*B+A-B=N-M.
考虑配平。。
(A-1/2)(2*B+1)+1/2=N-M
(2A-1)(2B+1)=2N-2M-1…
然后就nimendongde了。。
枚举右边的因子。。。
C:
按最短路建图,可以发现求是求一个ACG中经过一个点的路径数。。
然后设in[t]为0->t的路径数,out[t]为t出发点路径数.
那么in[t]=Sum{in[i],有边i->t}
out[t]=Sum{out[i],右边t->i}+1。。
然后乘起来就OK了。。
注意10^10*10^10会超long long
a*b=2*a*(b/2)+a*(b%2)。。。
于是二分的乘法(这。。。)就可以避免爆long long了囧。。。
D:
非常恶心的计算几何,gaoxin神犇太强了。。硬是A掉了Orz Sro。。。
各种麻烦。。。
E:
首先将所有trap按Di排序,然后一个个处理,记录当前消耗时间的和now,
每次遇到一个trap,如果它加进去之后now超过了它的D。。
那么就把当前要修复的所有trap中花费时间最大的给删掉。用堆来维护就可以了。。
F:
很简单的DP。。就是要高精度。。
然后注意到要输出约化的分数,由于分母是b-a+1的n次方。。这个玩意的质因数不多。。
一个个的两边都除过去就可以了。。
我用Java强A掉了囧。。。
G:
注意对一个ai,我们的di肯定是它的因子,然后一个数的因子数一般是比较小的,所以我们可以枚举。。
然后考虑一个di,我们需要知道在x到y有多少数t
最大公约数(ai,t)=di。。
这个可以用容斥原理解决。。
具体的说就是设F(n)表示x到y之间有多少数与ai的最大公约数为n。。
那么F(n)=x到y之间n的倍数-Sum{F(m),m是n的倍数}。。。
算出这个就可以直接DP了。。
H:
这个太囧了。。
要各种分情况讨论:
设a<b
a=0 b=0:此时就是一个点,该点的情况决定一切
a=0 b>0:此时是一维的情况,就是满足条件的线段长度/线段总长度b
a>0 b>0:此时是二维的情况,画出图来可以发现是两条线去切一个矩形。。。
还有一点。。。就是当答案=0的时候。按上面这么写甚至有可能输出-0.000000
这。。。。
I:
计算几何的水题。。不多说了囧。。。
J:神犇题啊。。。gaoxin和lichao神犇的做法太强大了。。严重Orz!!!!
首先考虑O(n)的做法。。
注意到可以列期望方程F[n]=pre*F[n-1]+nxt*F[n+1]+1
pre和nxt分别是向前和向后走的概率。。
那么解方程就是n^3了。。
但这题跟上次CF的某题很像。。这个矩阵是一个Tridiagonal_matrix
http://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm
所以可以O(n)求解。。
然后测试组数过多。。。O(n)TLE囧。。。。
n=2的情况很很囧。。
可以发现m=2的情况关于n成二次关系。。是一个n的二次函数。。
若m>2
设F(n,m)为答案
然后神犇们似乎是发现当n变大了之后F(n+1,m)-F(n,m)快速趋向于常数。。。
所以只需要计算很少的n。。当这个常数变的足够稳定之后。。就可以直接给答案了。。
复杂度不清楚。。但0msAC了囧。。。

7 thoughts on “ZOJ Monthly, October 2010 题解

Leave a Reply to ws1192 Cancel reply

Your email address will not be published. Required fields are marked *