[思维][贪心] UVa1613 K-Graph Oddity

先说结论:构造的方法就是以任意一个点开始dfs,对于dfs到的点,把他的颜色设置为没有在与他所有的相邻的已经被染过色的节点的颜色的集合中出现过的最小值,比如和它相邻有4个点,其中3个分别为1,3,3,另一个未染色,那么就把当前的颜色设置为2。

这个做法,网上并没有找到一个说得过去的证明,我自己也无法严格证明贪心过程的正确性,也没有找到官方题解,就是很玄学。而且,同样的贪心过程,如果先对一个点先dfs再染色,也就是根据子孙节点的颜色修改当前的颜色,就会出现某个节点大于k的情况(虽然仍然是保证了不同点之间不同染色),但是如果先染色再dfs,也就是先处理好搜索过的节点,根据祖先节点修改当前的节点,就能保证通过所有数据。
继续阅读“[思维][贪心] UVa1613 K-Graph Oddity”

[比赛][暴力][搜索][题意] 2018 ICPC 徐州网络赛 C Cacti Lottery

比赛最后的时候三个人在看B和C,真的是紧张,根本看不懂题意,也不懂第二个样例怎么算出来的,今天看了看发现就完全是考的搜索,完 全 就 是 搜 索

能过了BC的话也算是有8个A了,没准可以进。。。可惜没如果,怪自己当时脑子进水,一脸懵逼。

两个dfs,第一个把对方知道的自己不知道的填充上,第二个把两个人都不知道的填充上,注意这里的题意,很坑,需要自己好好理解。可能是我写的太挫了,我这个码量有点大。。。
错误的话,排列写成了组合,wa了两发,意识到之后直接加了个阶乘。。懒癌。还有就是搜完一个填充点之后return之前要把那个点的状态复原。

继续阅读“[比赛][暴力][搜索][题意] 2018 ICPC 徐州网络赛 C Cacti Lottery”

[贪心][优先队列] UVa 1623 Enter the Dragon

从后往前,如果遇到下雨的天气就存进优先队列里,如果遇到不下雨的天气,优先解决离当前位置最近的湖,用vis记录一个湖是否有危险,如果遇到一个下雨天这个湖已经有危险了那么就输出NO,否则标记为有危险,如果是不下雨的天有则把有危险的(队列中的)前一个最大的湖去掉。到最后如果队列非空则也输出NO,说明有的湖的危险没有解决。

继续阅读“[贪心][优先队列] UVa 1623 Enter the Dragon”

[思维][预处理][贪心] codeforces 990E Post Lamps

连续做的又一道预处理+贪心的题目,一开始因为复杂度的原因一直没有下手,看了官方题解才意识到复杂度是nlogn,因为调和级数求和是logn。。。

贪心策略就是每次都选择能覆盖到的范围内的最右边的非block的点,如果这个点等于原来的出发点就直接return -1,因为说明不可行。这时候我们需要预处理出来每个点对应的它左边离他最近的那个非block的点(也有可能是他自己),当然这个预处理就很简单了。主要的思考难度在于没想到可以这么预处理,其次是复杂度的分析没有到位。

错误的点的话是对题意的理解:这里要求覆盖整条线段,而不仅仅是覆盖整点,但是放灯却只能在0到n-1的整点上放。。。第二个错误是如果0处禁止放的话那直接就是输出-1了,原来的算法在这里会失效,因为那个总是多考虑一步,而没有考虑出发点是不是合法的。

继续阅读“[思维][预处理][贪心] codeforces 990E Post Lamps”

[比赛][思维][贪心] CCPC网络赛 HDU6438 Buy and Resell

都是泪啊啊啊啊啊啊啊啊啊啊啊啊啊

汪聚代哥一队打了79,v5的一批Ooooooorz    我们就很惨了,4题,300多名。。据说校前三可以去现场赛,然后我们第六凉凉。。

这个题真的是。。。真的是就差了那么一点,一层窗户纸,捅破就恍然大悟,过不去就死活想不出来了。我甚至也想到了官方题解中的类似于二分图的配置,可是没想到怎么去合并,不对,是我根本就没想合并。。。。。根本就没有意识到传递性啊啊啊啊啊啊啊啊惨的一批

最扯淡的是后面发现是原题。。。虽然有一点不一样,但是能理解原题的话就完全可以做这个了,啊啊啊啊啊啊啊啊啊啊啊啊啊啊

然后lyq差点把1005做出来,沙雕数论题,她会推公式不会实现,我会实现不懂公式,如果我们不是云操作的话可能就做出来了,在线交流真的难受。。。

还有就是1007,赛后看了一眼完全可做的样子,然而最后思维全死在这个A题。。。。决定去cf上刷一波进阶贪心了aaaaaaaa
继续阅读“[比赛][思维][贪心] CCPC网络赛 HDU6438 Buy and Resell”

[CF][贪心][枚举][思维] CF1019A

http://codeforces.com/problemset/problem/1019/A

今天想起来这坑还没填。心情差.jpg

当时比赛想了一个小时dp,然后在最后10min意识到可以枚举最后所需要的人数然后贪心。。可是已经没时间来实现了,然后就果断地凉了。今天直接补了

一开始纠结,主要在于,这个决策既得考虑人数又得考虑钱,有点像背包,就很不好操作。但是实际上,n范围只有3000,所以完全可以枚举人数,在这个固定的条件下去考虑对于一特定的人数x需要多少钱,就很容易了:每次先把人数大于等于x的减到x-1,把减去的人加到党派1的支持者数量里,这个过程中挑最小的那些累计起来。在做完这些工作后就是看有没有达到人数x,如果达到了/超过了就说明行了,虽然超过的话就不是正好x但是我们只关心钱数的最小值,如果没有达到,那么还需要从剩下的所有人里从小到大累计够人数才可以。

我这里只排序1次,然后每次设置used数组表示一个人是不是在第一步里用过了。算是n^2复杂度吧。当然这个题数据貌似很水怎么都能过。。

实现的话还有一个问题就是按照我的写法遇到p为1的时候是不能设置used的,因为这个其实是针对于党派1之外的来说的。。。因为这个wa了一发。 继续阅读“[CF][贪心][枚举][思维] CF1019A”