CTSC day2 酱油记

day1过了之后。。。继续打酱油~~~
day2的题目太可怕了。。。我看了3题之后觉得估计跟去年的day2一样。。珠宝商之类的题目我显然是不会做的。。
于是我花半个小时想了想3道题目。。觉得第一题P点想法也没有。。骗点分算了。。花10分钟写了个裸搜走人。。
第二题20分还是朴素的出来的。。。于是骗了20分走人。。。
剩下的时间全在狂写第三题。。。第三题算法非常明显就是各种难写。。。我自以为自己代码能力很强就开始狂写。。
由于空间计算几何很多都不会。。我写了个高斯消元然后打算用方程流算一切东西。。。
然后搞啊搞啊搞啊搞啊搞啊搞啊搞啊搞啊

搞啊搞啊搞啊搞啊搞啊搞啊搞啊搞啊

搞啊搞啊搞啊搞啊搞啊搞啊搞啊搞啊

。。好不容易把k=1的写出来了。。。
然后试图写k>1的。。最后没时间了。。
。。。结果k=1的也写挂了。。最后只有20分。。
其它人观察数据的分就比我高很多

orz fhq,zej,zyc,jzt进队。。茗姐不要慌T_T。。。

放爷威武啊。。。哎。。本来他如果去年NOI进队了今年就无压力进队了。。。

。。。哎我发现我两次考试都是一个策略。。其他两题随便搞搞然后死做某一题。。。虽然说第一试这个策略还算成功但第二试就悲剧了。。究其原因还是因为第一试的数据结构我还是挺熟悉的。。但第二试的计算几何我就很烂了。。。。。哎。。。。

CTSC day1 酱油记

。。洲妹说合格分是240分。。果断严重不合格T_T。。。

嘛。。反正是打酱油的。。也没什么压力。。。。
。。。感觉这次考试的策略还是挺成功的吧。。。

先是花20分钟看了一下所有的题目。。第一题挺裸的。。
第二题由于TC上有类似的题目。。感觉上是Trie树+各种乱搞。。。
第三题直观上贪心看上去挺不错。。。
可惜的第一题是没有考虑有限的情况挂了20分。。。。然后就开始填第二题的坑。。

我当时想的做法是各种维护再套上并查集乱搞。。。本来想先写个60分的来对拍的。。

结果写了半天调不出来。。。
最后我非常悲剧的发现我一个递归函数里用了个static的数组。。。

搞好之后结果已经只剩一个小时了。。。没办法只好无视第二题去搞第三题了。。。
鉴于时间不够了。。。写了个裸贪心了事。。。
。。还好考试的时候比较冷静。。第二题调不出来也没有慌。。不然就完了T_T。。。

感觉上这次的题目很不CTSC。。。

第一题就不吐槽了。。第二题太恶搞了而且去做的性价比极低。。
我觉得我第二题处理的太烂了。。。我直接采取讨论流解决问题了。。。还有很多比较优美的维护方法T_T。。

最后光60分就写了7KB。。。。全是各种讨论+细节处理。。难看的要死。。。看来以后做题目的时候还是应该多想想。。
大体上感觉有思路了就直接敲是不行滴>_<。。。把细节也想想清楚就好了。。。。
。。。提交答案题观察数据才是王道啊!!!!!!!好XX的网格图T_T。。。。

 

见到了卢神牛。。。太威武了。。。鄙视所有人。。。
卢神牛就是第一排那个抢答帝。。鄙视fhq,鄙视wy鄙视twb鄙视所有人

fhq 强A前2题。。。要高一进队了!!!太猛了Orz!!!!!!!!!!!!

晚上跑出去跟twb和jzp吃KFC。。。神犇们的共同点就是能吃啊!!!twb连吃3个汉堡。。jzp吃了4个。。。
我一个就吃不动了囧。。。。

我看到wy让fhq请客。。说不是我出的题你能进队嘛?。。囧。。。

CTSC 2010 Summary

[Ctsc2010]星际旅行

这个题目的做法还是比较难想的,首先考虑在根结束的情况,

那么每条边两个方向经过次数一样,
同时,只在每条边至少经过一次的条件下,

只要满足H的限制,那么这个必有可行的方案(欧拉路)。
由于题目中说了H>=度数,不难证明最优解一定用了所有边。
那么就可以代数化了。
代数化之后,不难发现可以网络流建模。

网络流->最小割->树的最小权覆盖->dp。

假设不在根结束,那么最后令他最后再走回根,也就是将到根的路径上除了根的点的H+1
这个可以用dp求出。
代码:
https://ideone.com/qzTp2

[Ctsc2010]三国围棋擂台赛

这题算是比较水的了吧。。

[Ctsc2010]性能优化
首先可以想到一个用DFT的做法。。但是那样会有精度问题。。。
通过用mod n+1的原根代替单位根。。可以解决这个问题。。
代码:
https://ideone.com/mjOj1

[Ctsc2010]产品销售

首先费用流做法是这样的,对每个需求连一条边到它被解决的那天(可以是之前,代价是保存费用,可以是之后,代价是用户损失费)

那么考虑费用流算法。。注意到这个的增广路是满足“区间合并”性质的
费用流每次取费用最小的增广路。。用线段树维护费用流~~
最多增广O(N)次
但是这个方法非常的麻烦。而且nzk说不可过。
所以就没写了。。。

[Ctsc2010]珠宝商
//待写~~
代码:
https://ideone.com/rHbcO

泪流满面

。。。。。。搞到了程序。。。

大出意料的是。。monument AC。。

然后movie 爆0。。。。

我打开movie看了一下啊。。

发现。。。分母是k^n。。被我手滑敲成了n^k。。。。

我的100分‍。。。。。

。。。完挂。。。。各位再见。。。

很难过吧。。。考得完爆了。。。

。。。。。。其实也没什么可以说的。。。都是蒟蒻的借口罢了。。。

。。。自己果然还只是半吊子水平呢。。。。

。。。祝大家都能进省队。。。其实只要不要有遗憾就好了呢。。。

虽然我很遗憾或许不能走下去了。。。。。

886

TC SRM 500

。。。。-25。。。。

我还能说什么?。。。。。。

。。。首先250做不出来。。。

。。。然后去写500。。。我想的是搜索然后剪枝。。但是实现脑残了。。。

没办法了去看1000。。。想想可以枚举9,8,4,6,不过脑子又残了。。觉得不可能是枚举就行了吧(算都没算)。。就想dp。。就挂了。。。

 

好吧,总结一下。。。

首先250的思路也不是非常难。。但是我思维局限很严重。。。没有跳出坑的能力啊T_T。。以后都做做这类考思维的题目。。。

500的话。。。想好再写也不是很难吧。。但我250卡了半天那啥起来了。。就开始直接写了。。。还是没有做到完全冷静的程度啊。。。。。

1000。。。。。。我可以去死么。。。。以后严谨点啊T_T。。。。

 

!!!!!!!!!!!!!!!!!!!

操!!!!!!!!!!

我250pt的题目看错了!!!!!!!!!

 

CF 60

。。。。这次的比赛。。。已经成hack cup了。。。

A题各种那啥。。。我写完B题之后撇了一眼standing。。发现有人cha了很多A题。。

于是仔细一看A题。。发现我错了。。

然后。。。

我直接lock掉A题。。跑去狂Cha别人。。。

最后Cha了21个吧。。。。虽然我A和D全挂了。。最后还是没有太悲剧。。。

B就是一个直接裸推过去。。。

C的话就是二分然后搞。。。。。。。

D的话我想了半天以为贪心是对的。。。结果显然是错的。。同时正解居然是爆搞。。。

因为可行的状态数非常少。。。好阴险的题目啊。。。我了个去。。。

 

P.S。。其实我觉得如果我静下来心来看应该还是能明白D的奥妙的。。可当时我只顾着Cha A心思完全不在点上。。。

。。。还是比赛的心态不够好啊。。。

教训:裸贪心至少也写个对拍拍一拍啊。。。。。

SGU 481..Hero of our time

正经的写一篇题解吧。这个题目求的是有标号的n个点n条边的联通图的数量。n  <=5000

往往题目异常简洁的题目会比较难>_<。。。

分析1:

这个图必然是一个环加上一个外向树的形式。

思路1 or 2:

那么接下来就有两个思路了,要么固定环,想办法算出答案,要么选一个点为根,在这个有根树中考虑这个环。

思路1:

尝试固定环,设环大小为k,那么在这个图中去掉这些环上的边,得出的就是n个点,k棵树的森林。

令F(n,k)表示n个点,k棵树的森林的个数,那么环大小为k的情况答案是:

F(n,k)*k!/2。。这不难理解。。因为森林出来之后森林的那些根的园排列有k!/2种。

考虑如何求F(n,k)。

思路 1.1 or 1.2:

要么将F(n,k)看成一个二维递推式,推导出结果。 要么尝试使用组合数学的方法直接计算出F(n,k)。

思路 1.1:

考虑一棵树,为了在递推中不影响树的大致的整体结构(最大相似性决定递推的成功>_<)。我们可以

尝试取走一个叶子来将树的大小-1

那么令G(n,t)表示n个节点,t个叶子的树的个数。

考虑两种规划的方式,正向和逆向,逆向规划(即在算G(n,t)时用以前的结果)的关键在于取走一个叶子之后,不能知道叶子的父亲是否

会变成叶子,而叶子数是很重要的,所以不可行。正向规划相反则是可行的(即用G(n,t)更新G(n+1,..)的)结果。

考虑当前是G(n,t),如果加入一个叶子,那么可以连到叶子节点上,也可以连到非叶子节点上。

前者叶子数不变,后者叶子数+1。就可以较方便的计算了。

但是每个G(n,t)在计算的时候,它的每个叶子都会把它的结果计算一遍,所以最后要除以t。

但是这是n^2的,而且还涉及高精度的问题。所以不是一个好算法。

思路 1.2:

在推导标号树个数的时候有一种方法叫双重计数,同样可以解决计算F(n,k)的问题。

并能给出一个直接的公式

没时间就不展开了。。。可以自己去看wiki

复杂度是O(N)。

http://en.wikipedia.org/wiki/Double_counting

 

思路2:

令1为根,那么我们可以找到环中最接近1的点(注意,满足唯一性!计数问题必不可少的)

令其为x,考虑x在环上的两个相邻点l和r。

令l<r。。去掉边x->r。就变成了一棵树,还是以1为根可以发现l是r的祖先。

可以发现在“1为根,x在环上的相邻点是l和r且l<r的结果” = “1为根,l<r且l是r的祖先的树的个数”

那么后者的结果乘以每句l和r造成的C(n-1,2)就是答案。

如何求后者呢?

有一种prufer Code的推广形式能轻易的给出答案。。由于非常繁琐就不说了。。

http://www.cs.elte.hu/egres/tr/egres-05-16.pdf

 

。。。我发现写这么多还不如直接贴5、6个网址让大家自己去看。。。。

我2。。。。