一些题目的一句话题解

感觉有的题目不需要发一篇博客,但又想记录一些东西,所以干脆开一篇专门写一句话题解。。

TOJ 1089 Happy 2004 问2004^X的所有约数的和模29。这类题的做法是分解质因数,一个数可以分解成p1^a1*p2^a2*...*pn^an,每种质因数可以选pi^0,pi^1..pi^ai,所以每个质因数是一个等比数列求和,然后再全部连乘就是约数和。

TOJ 2740 Genealogy 给你一个多叉树,要添加最少的点使得每个节点儿子不超过d(其实题目里是老子=_=)。对于每个点,如果儿子超过d,就增加numofson/d的点,然后儿子个数变成了numofson/d+numofson%d,做到不超过d。

TOJ 2407 POJ 2785 4 Values whose Sum is 0 写这题的时候总感觉做过。。后来发现确实做过,两次做法还不一样。。都是分两半,各处理两个list,然后第一次写的是将一半都insert到hash table里,另一半去找相反键值,这种快一些。这次写的是二分,拿一半排序,二分找另一半每一对的和的相反值(很蠢地用lower_bound+upper_bound,其实一个就够,所以比较慢)

TOJ 1011 POJ 1265 Area 给你一个在格点平面上的简单多边形,求面积,边上的格点数和内部格点数。多边形给定了,所以可以直接用叉积求面积,然后边上的点可以用gcd(dx, dy)得到(两个方向以dx/gcd,dy/gcd的速度增加,得到gcd个格点,画个图就很显然了),再用皮克定理S(面积) = n(内部格点数) + s(边上格点数)/2 - 1,得到内部的格点数n。

TOJ 1105 POJ 1496 POJ 1850 字符集a-z,a标号1,z标号26,ab标号27这样下去,要求满足序列单调增,最大到vwxyz为83681,给你任意序列问标号。水题也写水了=。=没想到直接算的好方法,干脆模拟它的进位,然后用map给存起来。。其实由于单调增的特点,就直接变成组合数了,每次选出来只有一种排列即单调增的排列。就很好算了,比如index[ceh] = c[26][1]+c[26][2]+c[25][2]+c[24][2]+c[22][1]+2+1,即长度为1的数量,长度为2的数量,长度为3第一位为a数量,长度为3第一位为b数量,长度为3前两位为cd数量,然后就是cef,ceg,ceh了。

TOJ 1117 Game Prediction m个人每人n张牌,大小1..m*n,n轮,每轮出牌,最大的人赢。给你你的牌,问你最少赢几次。即考虑每次尽量被压。。从最大牌开始,如果是你的牌,且可以压你的牌cnt==0,即不会被压,ans++,会被压即cnt!=0,cnt--。如果不是你牌,cnt++。开始只考虑了最大的n张牌就错了(比如m=10,n=10,你有90,91,93-100,这时90也是可以赢的)

posted @ 2014-08-18 19:01  james47  阅读(123)  评论(0编辑  收藏  举报