一题一题写太慢了,没精力也没那个必要,blog重开,以后记录每天做题的要点,只写题号默认是POJ
2823 Sliding Window
动态维护区间最小值/最大值,看一眼就直接用堆秒掉了,复杂度O(nlogn),用了10s,汗
看了下Discuss,用deque应该更好,能做到O(n),线段树也是O(nlogn)
1755 Sum of Factorials
貌似有什么数学方法,我用暴力DFS跑了300多ms,WA了一次,没特殊处理0的情况(第一次DFS就退出来)
3086 Triangular Sums
水题,注意T要算到301项,数组别开小了
2853 Sequence Sum Possibilities
和2140基本一样,上学期算法课考试的最后一题~求和公式O(n),另外考虑奇偶性能做到O(sqrt(n))
2549 Sumsets
挺有意思的题,n<=1000,暴力枚举显然不可能.
变形一下:a+b=d-c
用O(n^2)枚举a+b,用set记录,要注意四个数必须不同
再用O(n^2)枚举d-c,判重即可
这样复杂度是O(n^2 logn),TLE了
想了下题目要求的是最大的d,先把输入排序,d按减序枚举
用vector数组模拟链式hash表,hash函数为取绝对值再取模
这样复杂度降到了O(n^2)
开了10^4的hash表,250ms AC
试着增大hash表的大小,时间反而更长,怀疑是vector的操作太慢了,虽然减少了冲突
最后10^3大小做到了125ms
2785 4 Values whose Sum is 0
很早就看过题,一直没做,其实和2549差不多
a+b=-(c+d)
思路差不多
某人说排序完直接做就好,那样貌似是O(n^2 logn) (要二分查找),或者我理解有点问题
vector的低效得到验证- -|
上题的程序改了改就交上去,TLE
改了几次hash表的大小,不是TLE就是MLE
实在没办法,自己手写hash吧,先试了如果冲突就往后放的方法,还是TLE....
不能偷懒啊....又改写成数组模拟的链式hash,终于AC了!
156960K 4563ms
数据不错,哈哈,开了10^7左右的hash表
JOJ 2489 Billboard
和某人聊到去年省赛...
这题也是当时没搞定,贪心,dp都觉得不对,于是翻出来做
现在再看一遍.....二分图权匹配! 哎...当时太菜了
2个串的长度都<=100,直接用O(n^3)的KM,先预处理第一个串的i位置和第二个串的j位置,如果字符相同,连一条权为abs(i-j)的边.
可是这题不是完美匹配,直接套用求最大匹配的KM会有问题,即使把边取负数.因为有可能匹配不存在的边(原来设为0).
改了下,先做第一问,有几个牌子可以重用.然后把不存在的边赋成-10^5
求出最大匹配后答案加上(第一个串的长度-第一问的答案)*(-10^5)即为第二问的答案