刷题总结
文章平均质量分 72
大米GoGoGo
Fighting Fighting Fighting
展开
-
ACM竞赛须掌握的知识
图论 路径问题 最短路径 0/1 边权最短路径BFS 非负边权最短路径Dijkstrau 可以用Dijkstra解决的问题的特征 负边权最短路径Bellman-Fordu转载 2012-09-01 00:17:46 · 580 阅读 · 0 评论 -
codeforces #147(div2)
A 求h和m完全相同时最长的连续个数。。。#include #include#include#define M 100010int h[M],m[M]; int main(){ int n,k,i,j,c; while(scanf("%d",&n)!=EOF){ c=1; k=1; scanf("%d %d",&h[0],&m[0]);原创 2012-10-27 15:26:28 · 517 阅读 · 0 评论 -
zoj1986(搭桥)
读了好几遍题,也没想到是求最长上升子序列。。。看了别人的分析后才明白。。。。要想让桥不相交,就必须是上升序列。。。 #include#include #includeint b_search(int a[],int x,int len) //此处用二分查找以降低时间复杂度。。。否则会超时。。。{原创 2012-08-12 17:07:00 · 490 阅读 · 0 评论 -
zoj1088 System Overload
大牛说这是约瑟夫问题。。。递推公式是:令f[i]表示i个人玩游戏报m退出最后胜利者的编号,最后的结果自然是f[n]递推公式f[1]=0;f[i]=(f[i-1]+m)%i; (i>1)我还没想太明白。。。回头再解释。。。#include#include#includeint main(){ int n,m,i,j,k,t,flag; w原创 2012-09-17 20:21:12 · 539 阅读 · 0 评论 -
CodeForces156B Suspects
先假设第i个嫌疑犯是罪犯,看此时说真话的人满不满足m个,若满足,则此假设成立。由于只有一个罪犯。。。故可判定。。。。。。#include#include #include#include #define inf 0x7fffffff#define Maxn 100010int a[Maxn],f1[Maxn],f2[Maxn],f[Maxn]; //f1[i]记录猜第i原创 2012-09-19 21:53:52 · 673 阅读 · 0 评论 -
pku3289Moonshine(模拟问题)
真是一道让人头疼的几何模拟题。。。wa了n多遍。。。注意圆台部分上底半径的求解,否则圆台体积会求错。。。横放时圆台部分体积要微元求解。。。最终s的确定要靠二分逼近。。。#include#include #include#include#define pi 3.1415926535898#define N 1000double k,hb,db,hn,dn,h,s,v,V,原创 2012-09-23 16:50:42 · 551 阅读 · 0 评论 -
Codeforces Round #144 (Div. 2) (模拟问题)
A. Perfect Permutation 这道为水题,没什么好说的。。。if(i%2) a[i]=i+1; else a[i]=i-1;B. Non-square Equation为避免超时,枚举s(x)从1到81,而不是枚举x,然后用n和s(x)及求根公式求出x,判断x是否满足条件。。。找出最小的x。。。。。。#include#include #include原创 2012-10-17 20:17:49 · 514 阅读 · 0 评论 -
快速幂模板(整数+矩阵)
快速幂模板(整数+矩阵)1//整数的快速幂 m^n % k 的快速幂: long long quickpow(long long m , long long n , long long k){ long long ans = 1; while(n){ if(n&1)//如果n是奇数 ans转载 2012-09-17 22:01:54 · 1594 阅读 · 0 评论 -
Codeforces Round #216 (Div. 2) D. Valera and Fools
题目链接: http://codeforces.com/contest/369/problem/D注意题意:所有fools都向编号最小的fool开枪;但每个fool都不会笨到想自己开枪,所以编号最小的fool向编号次小的fool开枪; 所以只需记录编号最小的两位成员即可代表一种状态;当然当只剩一个fool时,次小编号是不存在的出界元素。原创 2013-12-04 22:28:24 · 1145 阅读 · 0 评论 -
poj 1753 Flip Game & poj2965
用位操作+BFS+枚举解决.基本思想如下:给棋盘每一个状态赋予一个状态id,id计算方法是将棋盘与数的二进制表示联系起来,如题所给的数据:bwwbbbwbbwwbbwww状态id为6585,计算方法为1*2^0+0*2^1+0*2^2..1*2^12+0*2^13..=6585(其中b代表1,w代表0)在此基础上进行BFS搜索,1)总的状原创 2013-11-16 16:02:48 · 1196 阅读 · 0 评论 -
Codeforces Round #216 (Div. 2) C. Valera and Elections
http://codeforces.com/contest/369/problem/C做题时一直纠结于该怎么建立一颗多叉树,怎么存储比较合理而又方便。。。后来看到有人用vector存树,有点儿茅塞顿开的感觉。。。1)用vector数组保存每个节点的子节点;2)深搜,找到每个节点的父节点,从而建立一棵树;3)遍历边,若某条边有问题则将该边的子节点col值赋1,沿该节点向上直至根节点的原创 2013-11-30 11:28:23 · 861 阅读 · 0 评论 -
LCA
最近公共祖先(Least Common Ancestors)对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。另一种理解方式是把T理解为一个无向无环图,而LCA(T,u,v)即u到v的最短路上深度最小的点。这里给出一个LCA的例子:对于T=V={1,2,3,4,5}E={(1,2),(1,3),(3,4),(3原创 2013-05-18 17:04:36 · 577 阅读 · 0 评论 -
hdu4296Buildings
此题仅需用 w+s 的值进行从小到大的排序即可 注意 结果可能超32位证明 只需要证明相邻的即可 因为它们不会影响前面的PDV 也不会影响后面的PDV假设 w1+s1 那么 w1+s1 在前则 最大PDV 为 P1=max(X-s1,X+w1-s2);如果 w2+s2 在前则 最大PDV 为 P2=max(X-s2,X+w2-s1);我们可以同时把X去掉 则P1=m原创 2012-09-19 20:05:51 · 560 阅读 · 0 评论