摘要: 这题的结果[f(1)+f(2)+...+f(n)]其实就等价于x*y*z<=n的解的个数,然后的方法几乎就是暴力枚举了。现场比赛的时候没想到这一点,太杯具了,浪费了两个小时的思考时间。其实我们的做法应该是可行的,因为f(n)具有积性性质,也就是若gcd(n, m)=1,则f(n*m)=f(n)*f(m)。而当p为质数时,f(p^k)=(k+1)*(k+2)/2,这样就能把f(n)数列的前n项和化成一堆多项式的加和。然后用合并同类项的思想,用容斥原理搞,可是代码量太大了,没打出来。。。今天赛题被挂到HDOJ上以后用上面说的枚举方法打了一下,交上去居然WA,调了半天也没发现错误,最后才怀疑是 阅读全文
posted @ 2012-11-12 16:53 moonbay 阅读(360) 评论(0) 推荐(0) 编辑
摘要: 这题公式不难推,就是控制精度的问题。因为公式是一些项求和,这里每一项都是接近于1的数,但是每一项里包含一个组合数和一个p^n,如果每次直接把p^n乘进去就会使数字太小,如果一直留到最后乘,可能中间就溢出了。解决的办法就是根据中间变量的大小动态地乘p^k,防止溢出,也防止数字太小丢精度离比赛结束已经有一段时间了,今天再来看这题,打算把它A掉,结果查了一下解题报告,发现这题其实有不需要控制精度的方法!!!唉,当时太SB了,这种方法居然都没想到,花了一两个小时去控制精度。其实只要在运算过程中全部取对数就可以了。。。。啊啊啊。。。/* * hdu4465/win.cpp * Created on: 2 阅读全文
posted @ 2012-11-12 16:42 moonbay 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 对于现场赛出题出到这么水表示无语。。。。/* * hdu4464/win.cpp * Created on: 2012-11-17 * Author : ben */#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <ctime>#include <iostream>#include <algorithm>#include <queue>#include <set>#include 阅读全文
posted @ 2012-11-12 16:35 moonbay 阅读(796) 评论(0) 推荐(0) 编辑
摘要: 挺水的,我是用n个set分别存下n个用户的广告,然后对于遍历一次所有用户的广告处理出ans数组,输出即可。/* * hdu4020/win.cpp * Created on: 2012-11-10 * Author : ben */#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <ctime>#include <iostream>#include <algorithm>#include <queue 阅读全文
posted @ 2012-11-12 16:30 moonbay 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 这题还是挺好的,想了好久才想出做法。做法的大体思想其实就是暴力删点,用了一个布尔数组(deleted)来记录在执行一个请求前某点是否已被删除(所以在点结构体中加了一个变量id以唯一标识一个点)。我是用了两个链表存了两份点(lx, ly),一份先按x再按y排序,另一份先按y再按x排序。然后用一个mapx存下lx中不同x值开始的位置。(同理得mapy)。对于一个删除x=d的请求,可以直接从mapx中读出x=d在链表中的起始位置,然后一个个地删,一边删一边记录在deleted数组中就可以了。同理可以处理y=d的情况。这题最让我记忆深刻的地方是我在打代码的时候有个地方犯了一个小错误死循环了没输出结果, 阅读全文
posted @ 2012-11-12 16:27 moonbay 阅读(175) 评论(0) 推荐(0) 编辑