09 2012 档案
9-12
摘要:POJ2171 首先想的应该是给定一个n,求1-n中比m小的有多少个。可以通过取出m的前多少位或者补上多少位,来保证字典序一定小于等于m,然后计算个数。这样我们可以从m开始枚举答案,每次扩大十倍,计算个数。如果到某一个数之后超出了答案,那么n一定在这一个数和前一数之间,通过剩下的数计算即可。POJ1845 求a^b所有约数的和,就是所有质因数各自的等比数列和的乘积,而质因数的个数也就是a的质因数个数的b倍。接下来就是等比数列求和的工作,由于过程中要有mod操作,公式法直接求是不行的,所以采用折半法求等比数列和。POJ3904 给出n的数,求出能组成最大公约数为1的四元组多少个。采用容斥原理计算 阅读全文
posted @ 2012-09-12 11:18 Minty 阅读(191) 评论(0) 推荐(0)
9-10
摘要:POJ2182 倒着做,根据当前这头牛排第几来计算放哪头牛。用二分加上树状数组来优化。POJ2853 设a、a+1...a+k为满足要求的序列,则2sum=(2a+k)*(k+1),显然(2a+k)>(k+1),而且两数必定一奇一偶,因此解的个数就是2sum的奇数因子个数,也就等于sum奇数因子个数。POJ2663 n*3的1*2domino覆盖问题。f[i]=f[i-2]*4-f[i-4],i为奇数时无解。POJ1740 当石子出现一对一对时,必然是后手赢,除此外一定是先手赢。因此只要判断是不是每个数都出现了偶数次。POJ1147 与POJ1602相似,但是却有本质性的不同。当把最后一 阅读全文
posted @ 2012-09-10 08:05 Minty 阅读(123) 评论(0) 推荐(0)
9-7
摘要:POJ1818 贪心构造。首先题目显然满足单调性,可以采用二分答案。为了让结果尽可能更优,我们每次对p都尽可能让它与(p-k)进行对抗,但是用DFS的话可能导致本应用几个较大的数,但是用了一个小的,导致别的更小的数被封死了,所以我们采用BFS来完成。每次只要看枚举的ans前的数是不是都用上了,取数时可以用并查集优化使复杂度到O(1)。POJ1992 简单DP,但是数据组数很多,fillchar会超时,只要每次将需要用的数清零即可。f[i,j]在纵方向上只会是f[i-1,j]+1或0,所以只用一维数组然后滚动即可。POJ2110 我的方法是枚举下限,再用SPFA求出最小的答案。更优的方法是二分答 阅读全文
posted @ 2012-09-07 08:38 Minty 阅读(245) 评论(0) 推荐(0)
9-5
摘要:POJ1964 O(NM)悬线法求最大子矩形。悬线定义为一点到其上方最近的坏点(或边界)的线段。h[]、l[]、r[]分别表示(i,j)点悬线的长度、最多向左拓展多远、最多向右拓展多远,三个数组都由(i-1,j)及附近的坏点转移过来。POJ1734 floyd找最小环并输出方案。主要部分是两个dist数组,其中一个不进行更新。在以k为中间点更新之前,枚举一下k作为最大点的环。ans=min(dist[i,j]+graph[i,k]+graph[k,j])graph为不更新的距离数组。需要注意的是出现了三个数值相加,需要注意OO大小的设置。POJ1730 给出X,求X=b^p的最大的p。先将X分 阅读全文
posted @ 2012-09-05 08:32 Minty 阅读(174) 评论(0) 推荐(0)
9-4
摘要:POJ2019 给定一个正方形,每个点有权值。再给出一些询问,求询问范围内最大值与最小值之差。可以先对每行用单调队列求出极值,然后再对每列操作。由于有效点个数小于询问个数,所以可以先把所有范围都计算出。POJ2133 给定一些01串,问通过xor操作能否得出一个目标串?不能的话尽量接近,还是多解让操作数尽量少,仍然多解让数值尽量小。首先对于操作数,由于xor操作具有交换律,实际上就是参与操作的串的个数减一。由于要求很多,我们尽量用一种方法求出所有可以到达的状态,然后枚举求最优。由于n只有16,可以状态压缩然后进行BFS,这样也能求出得到每种状态的最小操作数。POJ1113 裸凸包。学习了水平序 阅读全文
posted @ 2012-09-04 07:21 Minty 阅读(175) 评论(0) 推荐(0)
9-3
摘要:POJ1925 一开始的想法一定是枚举每个坐标,然后O(n)的枚举高楼去更新。但是由于不能拖地的限制,每个高楼能够更新的范围是一定的,可以先计算出,更新时只更新当前范围中的点。注意在OJ中,算数运算上溢也表现为RE,还有注意sqrt函数里是否超过longint。POJ1906 三的整数次幂的多少次方有没有,转化为二进制的某一位有没有。然后根据转化之后的二进制数输出。三的整数次方需要用打表或是高精。POJ1707 用到了伯努利数。Sn=(0~n)Σ 1/(n+1)*C(k+1,i)*B(i)*n^(k+1-i)。注意:前面有一个1/(n+1),求sigma范围是0~n。题目中也练习了GCD、LC 阅读全文
posted @ 2012-09-03 07:39 Minty 阅读(235) 评论(0) 推荐(0)
9-2
摘要:POJ2356 给出n以及n个数,找出一些数使其和为n的整倍数。因为找出一组可行解即可,我们考虑0-n共有n+1个数,根据鸽巢原理至少有两个数的前缀和mod n的余数是相等的,那么找出这两个数即可。POJ1283 一开始想是组合数学的题目,但是计数的话重复状态很多,要避免需要规定一个每组人数递增或递减的规定。f[i,j]=f[i-j,j]+f[i-1,j-1]。f[i,j]表示i台电脑用j辆车有多少种方案,f[i-j,j]表示j辆车每辆都至少放了2台,f[i-1,j-1]表示第j辆放了1台,这样能保证每辆车所放电脑数一定是递减的。非常巧妙的方程。POJ1948 一开始想通过海伦公式找取的极值的 阅读全文
posted @ 2012-09-02 08:17 Minty 阅读(141) 评论(0) 推荐(0)