第一题:
题目大意:
给出N个字符串,字符串的前面部分都是字母且都是一样的,后面部分是数字,按照后面的数字排序。N<=10000
解题过程:
1.第一题是真良心,一开始的做法是把后面的数字分离出来 比较大小,但是出现了傻逼错误样例过不去,就直接换了种方法,先比较长度再比较字典序。 结果就AC了。
2.如果按照最初的做法分离数字只能拿到70分,因为题目没说后面数字的范围,实际上是会爆long long的。
第二题:
题目大意:
有N个任务,每个任务有一个优先级p(各不相同),到达时间s,完成所需要的时间t. 每次会选择一个已经到达的且优先级最大的任务,让它的t减去1. 现在有一个任务的优先级不见了(定为-1),但是知道它是在时间T完成的。要你求出这个任务的一个可能的优先级 已经所有任务的完成时间。 N<=300000.
解题过程:
1.很容易想到用大根堆来模拟,先把时间离散化,然后根据时间来模拟。当模拟到任务x(优先级未知的那个)的时候再来特殊考虑。
2.当模拟到任务x的开始时间的时候,对它造成影响的任务只可能是当前堆里的任务以及开始时间在T之前的任务。所以把这些任务都放到一个表里,然后按照优先级来排序。由于题目保证有解,所以只要确定这个任务的优先级的范围就可以了。由于优先级比这个任务大的任务肯定要比它先做,所以当这些任务的耗时的和加上任务x的耗时等于T-Sx 的时候,就可以确定这个任务的优先级了。由于所有优先级不同,还要用一个set来搞。 总之细节上很容易出错,感谢WJZ大神的点拨才木有爆0.
第三题:
有一棵n个结点的黑白相间的大树,从1到n编号。
这棵黑白树中有m个黑点,其它都是白点。
对于一个黑点我们定义他的好朋友为离他最远的黑点。如果有多个黑点离它最远那么都是它的好朋友。两点间的距离定义为两点之间的最短路的长度。
现在你要摧毁一个白点。
摧毁后有一些黑点会不高兴。一个黑点不高兴当且仅当他不能到达任何一个在摧毁那个白点前的好朋友。
请你你最大化不高兴的黑点数。
解题过程:
1.比赛的时候把时间都花在了第2题,这题自然就爆0了。
2.AC算法:直接看vfk的吧 http://uoj.ac/blog_show.php?id=12
总结:
1.总体来说还是时间把握的不是很好,T3其实可以暴力骗个二三十分的,看到T2这么变态就放弃治疗了。
2.做题还是要静下心来,一个算法碰到了一个瓶颈,不要轻易放弃,说不定只要加点东西就变成正解了。