
PKU
文章平均质量分 64
Wall_F
这个作者很懒,什么都没留下…
展开
-
POJ 3070 Fibonacci
矩阵快速幂求fibonacci数。思路:因为上次周赛遇到一道求fibonacci的变形题,那个数与fibonacci的关系都推出来了,但是由于数据量有1000,各种超unsigned long long ,一直TLE,所以今天从师兄给我的矩阵资料上找到矩阵快速幂求fibonacci数的资料。待会同学过生日去吃饭,回来再写写总结。这篇文章写的蛮不错的:http://www.cnblogs.c原创 2012-12-12 17:52:23 · 576 阅读 · 0 评论 -
POJ 2478 Farey Sequence
大意不再赘述。思路:F2 = 1, F3 = 3, F4 = 5, F5 = 9;F3-F2 = 2,F4-F3 = 2,F5-F4 = 4;说明F3 = α(2)+α(3),F4 = α(2)+α(3)+α(4);#include #include #include #include #include #include using namespace std;typ原创 2013-01-10 22:51:48 · 749 阅读 · 0 评论 -
POJ 3090 Visible Lattice Points
大意不再赘述。思路:两两不能约分,即找(X,Y)两两互素的对数,所以求得欧拉函数值之后需要乘以2,而且(1,1)这个特殊的值也算一个,结果即为phi[n]*2+1。#include #include #include #include #include #include using namespace std;typedef long long LL;const int原创 2013-01-11 15:16:14 · 653 阅读 · 0 评论 -
POJ 1284 Primitive Roots
大意原根的求解。思路:如果P是素数,原根的个数为α(P-1)。扩展阅读:http://zh.wikipedia.org/wiki/%E5%8E%9F%E6%A0%B9#.E6.80.A7.E8.B4.A8#include #include #include #include #include #include using namespace std;typedef lo原创 2013-01-10 22:30:53 · 701 阅读 · 0 评论 -
POJ 1006 Biorhythms
大意不再赘述。思路:由于23,28,33互素,所以可以用中国剩余定理来求解。x≡a1(mod m1)x≡a2(mod m2)…x≡ak(mod mk)其中,m1,m2..mk互素。方程的一个解就是a1*x1*m1+a2*x2+m2....+ak*xk*mk,这个解加减M的整数倍之后就可以得到最小非负解。#include #include #include #inc原创 2013-01-11 16:05:13 · 551 阅读 · 0 评论 -
POJ 1305 Fermat vs. Pythagoras
大意:给定一个整数N,求N范围内(x,y,z 思路:本原毕达哥拉斯方程组满足:x = m^2 - n^2;y = 2*m*n;z = m^2 + n^2;其中m > n,且m,n奇偶性不同。在此题中,要求所给范围内的毕达哥拉斯三元组,只需对m,n进行枚举即可,然后将三元组乘以i(保证i*z在所给的范围之内),就可以求出所有的毕达哥拉斯三元组。原创 2013-01-12 17:45:29 · 766 阅读 · 0 评论 -
POJ 2465 Adventures in Moving - Part IV
大意不再赘述。思路:d[i][j]表示到达第i个加油站时剩余油量为j时的最小消耗,其他类似UVA 10201.#include #include #include #include using namespace std;const int MAXN = 110; const int INF = 0x3f3f3f3f;struct{ int dis, price;}原创 2013-01-14 09:46:37 · 924 阅读 · 0 评论 -
POJ 2828 Buy Tickets
大意略。思路:倒序插入,表示从左往右数,第i个区间有多少个空位置,于是找到了最终的坐标。#include #include #include #include #include using namespace std;const int MAXN = 200010;int n, id;int Tree[MAXN<<2];int pos[MAXN], val[MAXN]原创 2013-03-05 16:30:17 · 779 阅读 · 0 评论 -
POJ 2886 Who Gets the Most Candies?
大意略。通过此题学习到了反素数与用线段树模拟约瑟夫环的应用。其中,相对位置的求解比较难懂额。#include #include #include #include #include using namespace std;const int maxn = 500010;int n, k;int pos;int sum[maxn<<2];const int anti原创 2013-03-06 22:38:30 · 741 阅读 · 0 评论 -
POJ 2407 Relatives
大意不再赘述。思路:简单的欧拉函数的求解。 = n(1-1/P1)(1-1/P2)....(1-1/Pn);Pi为n的约数。#include #include #include #include #include #include using namespace std;typedef long long LL;LL n;LL euler_phi(LL原创 2013-01-10 22:27:29 · 580 阅读 · 0 评论 -
UVA 10125 Sumsets
大意略。思路:粗略估计了一下时间复杂度,应该过不去,然后想到了POJ上一道a^2+b^2 = c^2+d^2相类似的题,于是就去写了哈希,转换一下:a+b = d-c,数组A按照从小到大排列。然后从后往前枚举A[i]-A[j],这样保证A[i]-A[j]大于0而且A[i]是满足条件最大的,其中hash与find的时候,要保证编码,解码的类型操作元素是同一类型的。至于整数哈希函数的设计的话,原创 2013-01-23 20:33:18 · 1050 阅读 · 0 评论 -
POJ 2891 Strange Way to Express Integers
大意不再赘述。思路:线性同余方程的应用。令m = lcm(m1, m2);x ≡ b1 (mod m1)x ≡ b2 (mod m2)以上等价于 x = b1 + m1y1; x = b2 + m2y2;联立可得:b1 + m1y1 = b2 + m2y2,即m1y1 - m2y2 = b2-b1;易知此方程的解为y2,因此小于m的非负整数解即为(b2 + m2原创 2013-01-06 22:42:18 · 692 阅读 · 0 评论 -
POJ 3093 Margaritas on the River Walk
大意:要求把一些物品放入背包,使得剩下的背包都放不下。思路:首先考虑所有可行方案,状态转移方程是: f[v] += f[v-V[i]];如果考虑“使剩下的物品都放不下”的条件,如果剩下的体积最小为v,那么方案数就是sum{f[j]}(C >= j > C-v),这个很好理解,只有剩余背包量在上述范围内才有可能放不进体积为v的物品。怎么实现呢?首先对体积进行一下预排序,然后枚举i作为原创 2012-12-13 21:12:46 · 754 阅读 · 0 评论 -
POJ 1014 Dividing
大意:每一种大理石可能会有许多个,但每个大理石的价值不同,问是否能否平分大理石的总价值。思路:简单的多重背包,先求出总的价值,然后判断sum/2是否能被刚好塞满即可。简单论证一下“拆分物品”的正确性。拆分物品:将第i中物品拆分成若干件物品,其中每件物品有一个系数,这些物品的费用和价值是原来的费用和价值乘以这个系数。使这些系数为:1、2、4....,2^(k-1),n[i]-2^k+1,原创 2012-12-29 22:16:12 · 580 阅读 · 0 评论 -
POJ 1061 青蛙的约会
大意不再赘述。思路:看过奥运会跑步比赛的都知道,一人在前,一人在后,两个人可以相遇的话,要么一个人可以追上另一个人,要么一个人落后另一个人n圈。反之,不能相遇的话,在题目中的理解就是,一个人不能永远超过另一个人n圈或者是速度相等(ax一定不等于by)。在这题中,我们以纬度的长度L为参照物,如果青蛙A在时间T可以相遇青蛙B的话,那么有x + m*T - y - n*T = p*L或者是原创 2012-12-30 21:10:22 · 778 阅读 · 0 评论 -
POJ 2115 C Looooops
大意不再赘述。思路:简单的一元线性同余方程,有点KD,移位运算符强制转换行不通,必须用1LL#include #include #include #include #include #include using namespace std;typedef __int64 LL;LL A, B, C;int K;void ex_gcd(LL a, LL b, LL原创 2013-01-01 23:54:09 · 607 阅读 · 0 评论 -
POJ 2688 Prime Distance
大意不再赘述。思路:本题数据区间的上下界到达21亿,所以数组是存不下来的。只能针对本题的假设:区间的长度小于1000000,然后把区间[L,U]内的素数筛选出来。具体怎么去筛选,我们知道,2147483647内的数要么是素数,要么可以被sqrt(2147483647)内的素数整除,也就是说,[L,U]区间内所有的非素数的所有素数因子都在sqrt(2147483647)内。首先将sqrt原创 2012-12-31 15:03:47 · 803 阅读 · 0 评论 -
POJ 3233 Matrix Power Series
大意不再赘述。思路:矩阵快速幂,需要用到两次二分,一次是求A^k,还有一次是求和A^1+A^2+A^3+......A^k时用到。求和时:当k为偶数:令t = A^1+A^2+A^3+....A^k/2,b = A^k/2,则S = t + t*b。当k为奇数:令t = A^1+A^2+A^3+....A^k/2,b = A^k/2+1,则S = t + b + t*b。递归求原创 2013-01-04 10:19:23 · 604 阅读 · 0 评论 -
POJ 1995 Raising Modulo Numbers
大意不再赘述。思路:简单的快速幂算法。#include #include #include #include #include using namespace std;typedef long long LL;LL a, b, m, h;LL pow_mod(LL a, LL b, LL m){ LL ans = 1; while(b) { if(b &原创 2013-01-03 20:56:07 · 779 阅读 · 0 评论 -
PKU 1320 Street Numbers
大意不再赘述。思路:佩尔方程的求解。佩尔方程:xn = [x1 dy1] ^n-1 x1yn = [y1 x1 ] y1佩尔方程的递推公式由此矩阵给出。至于x1,y1的话是方程的最小特解。如何求最小特解呢?x^2 - d*y^2 = 1,即x = sqrt(d*y*y+1.0),令y = 1,求得并检验x此时是否满原创 2013-01-04 21:55:53 · 737 阅读 · 0 评论 -
POJ 3225 Help with Intervals
#include #include #include #include #include #include #include using namespace std;const int maxn = 131072;int cover[maxn<<2], XOR[maxn<<2];int hash[maxn+1];void FXOR(int o){ if(cover[原创 2013-03-13 21:24:07 · 796 阅读 · 0 评论 -
POJ 2528 Mayor's posters
#include #include #include #include #include #include #include using namespace std;const int maxn = 111111;#define lc o*2#define rc o*2+1int color[maxn<<2], hash[maxn<<2];int li[maxn],原创 2013-03-14 11:58:47 · 734 阅读 · 0 评论 -
POJ 3687 Labeling Balls
大意略。思路:把指向关系变一下,即A->B代表A重量一定比B重要要大。然后拓扑时,从编号最大的开始寻找即可。#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 210原创 2013-06-01 08:54:25 · 829 阅读 · 0 评论 -
POJ 2724 Purifying Machine
大意:给定感染的物品(二进制)表示,一次操作可以消去一个物品,如果两个物品的二进制相差一位的话,那么可以一次消去两个,问最少多少次消去。思路:通过最大匹配求节省的次数(ans/2),然后用点集数减去已消去的物品数加上以前的操作数ans/2即可,res = ans/2, res += nx-ans;给出建图的代码:int check(int a, int b) //相差一位 { in原创 2013-06-03 15:39:06 · 1341 阅读 · 0 评论 -
HDU 3523 Image copy detection & POJ 2516
2道KM。HDU 3523题目长了点,POJ 2516 需要拆点来做KM。/*HDU 3523*/#include #include #include #include #include #include #include #include #include #include #include using namespace std;co原创 2013-07-31 10:48:11 · 1219 阅读 · 0 评论 -
POJ 3686 The Windy's & HDU 3718 Similarity
KM两道。POJ 3686 建图很巧妙,注意建图的方式。/*POJ 3686*/#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 60*原创 2013-07-28 20:16:23 · 1215 阅读 · 0 评论 -
POJ 2400 Supervisor, Supervisee
精度问题卡死我了。如果直接在括号里加-1.0*ans/(2*n)的话,被WA,而要转换为正数之后才可以AC。可能是POJ编译器的问题吧。#include #include #include #include #include #include #include #include #include #include using namespace st原创 2013-07-28 15:37:14 · 864 阅读 · 0 评论 -
POJ 2195 Going Home
测试模板。#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 1010;const int INF = 0x3f3f3f3f;struct Edge{ int原创 2013-08-10 15:35:00 · 868 阅读 · 0 评论 -
POJ 2446 Chessboard
经典的奇偶建图,这个模型有必要记一下。网络流过了。#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 40*40;const int INF = 0x3f3f3f3原创 2013-08-11 11:53:42 · 965 阅读 · 0 评论 -
POJ 1087 A Plug for UNIX
可以传递闭包之后做二分匹配,也可以直接最大流。。。。原创 2013-08-14 15:39:39 · 1014 阅读 · 0 评论 -
POJ 1375 Intervals
大意略。思路:过定点求得与圆的夹角,然后得到切线方向向量,该切线与x轴的交点就是阴影的端点了,然后求不连续区间即可。/*圆求切线;与直线的交点*/#include #include #include #include #include #include #include #include #include #include using names原创 2013-04-24 09:31:37 · 1148 阅读 · 2 评论 -
POJ 2354 Titanic
大意:给定经度、纬度,求两点之间的距离。思路:将点的经度、纬度转换为三维坐标,然后求得A-B弧所对弦长,求得圆心角,乘以半径就是弧长了。其中,North, East的经纬度我规定>0,South, West 这一题的精度要求非常BT,我是去网上下测试数据,然后暴力对拍才知道哪错了的,实际上是精确到小数点后3位。附上我错的二组测试数据。题外话:与昊哥抽题看谁A得快,结果尼玛比我快原创 2013-04-23 22:53:11 · 1077 阅读 · 0 评论 -
POJ 1474 Video Surveillance
大意略。思路:判断多边形是否有内核,可判断半平面交是否为空即可,由于可能会返回单点或者线段,所以通过增量法来实现。#include #include #include #include #include #include #include #include #include #include using namespace std;const double eps原创 2013-04-07 19:29:42 · 841 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers
#include #include #include #include #include #include #include using namespace std;#define lc o*2#define rc o*2+1typedef long long LL;const int maxn = 100010;LL sumv[maxn<<2];LL addv[原创 2013-03-13 21:23:10 · 776 阅读 · 0 评论 -
POJ 3667 Hotel
#include #include #include #include #include using namespace std;int n, m;const int maxn = 55555;#define lc o*2#define rc o*2+1int lsum[maxn<<2], rsum[maxn<<2], msum[maxn<<2];int cover原创 2013-03-15 18:47:25 · 832 阅读 · 0 评论 -
POJ 2001 Shortest Prefixes
大意:给定一些字符串,让你找到每一个字符串的最小前缀,该前缀能唯一代表该字符串。思路:字典树,维护一个val值,表示通过该结点的字母的个数,只要val[i] == 1,返回该字母的位置,如果都没有,直接返回字符串长度。#include #include #include #include #include #include #include #include using n原创 2013-03-18 16:47:58 · 766 阅读 · 0 评论 -
POJ 3264 Balanced Lineup
大意略。#include #include #include #include #include #include using namespace std;const int maxn = 50010;const int maxd = 17; // log10(50010) / log10(2);int n, m;int A[maxn];int minv[maxn原创 2013-03-20 22:21:00 · 763 阅读 · 0 评论 -
POJ 2187 Beauty Contest
大意略。思路:学习旋转卡壳而写的习题,其实求凸包后暴搜也可以过。传送门:旋转卡壳1,旋转卡壳2#include #include #include #include #include #include #include #include #include #include using namespace std;const double原创 2013-04-05 22:19:38 · 931 阅读 · 0 评论 -
POJ 1654 Area
大意略。思路:通过叉积可以算出多边形的有向面积(就算是凹变形也没关系),这样,我们根据移动方向把所有的点存起来,然后算通过多边形面积公式算出结果即可。#include #include #include #include #include #include #include #include #include #include using names原创 2013-04-06 19:06:28 · 844 阅读 · 0 评论 -
POJ 3335 Rotating Scoreboard & POJ 3130 How I Mathematician Wonder What You Are!
大意略。思路:两题都是判断凸多边形是否有内核,可以通过半平面交来实现,即判断半平面交是否为空即可。结果可能会是线段或者是点,扫描法不好做,可以用增量法来写。第二题精度最好调为1e-8,用1e-10会WA。#include #include #include #include #include #include #include #include #include #i原创 2013-04-07 19:27:15 · 1078 阅读 · 0 评论