摘要: ::目录 ::--DP---#162 (Div. 2)D. 找出一个数字串中最长的串,满足任意相邻的数不互质。HDU 1244 Max Sum Plus Plus Plus dp[i][j]=max(dp[i-1][j], dp[i-len[j]][j-1]+sum) len[j]表示第j段的长度,sum表示长度为len[j]的连续序列的和。--STL-----递推&找规律---HDU 1207 汉诺塔IIHDU 2077 汉诺塔IVCF#164 (Div. 2) E.Playlist 概率计算题,计算听歌时间的最大数学期望... 阅读全文
posted @ 2013-01-28 11:44 'wind 阅读(217) 评论(0) 推荐(0) 编辑
摘要: =============================以下是最小生成树+并查集======================================【HDU】1213 How Many Tables 基础并查集★1272 小希的迷宫 基础并查集★1325&&poj1308 Is It A Tree? 基础并查集★1856 More is better 基础并查集★1102 Constructing Roads 基础最小生成树★1232 畅通工程 基础并查集★1233 还是畅通工程 基础最小生成树★1863 畅通工程 基础最小... 阅读全文
posted @ 2012-09-28 20:49 'wind 阅读(503) 评论(0) 推荐(1) 编辑
摘要: POJ刷题分类(一):用的比较多的初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(poj3295) (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法: (1)图的深度优先遍历和广度优先遍历. (2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dijkstra) (poj1860,poj3... 阅读全文
posted @ 2012-07-27 19:44 'wind 阅读(341) 评论(0) 推荐(1) 编辑
摘要: 计算几何题目推荐计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板很重要,模板必须高度可靠。3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面大部分是模板。如果代码一片混乱,那么会严重影响做题正确率。4.注意精度控制。5.能用整数的地方尽量用整数,要想到扩大数据的方法(扩大一倍,或扩大sqrt2)。因为整数不用考虑浮点误差,而且运算比浮点快。一。点,线,面,形基本关系,点积叉积的理解POJ 2318 TOYS(推荐)http://acm.pku.edu.cn/JudgeOnline/problem?id=2318POJ 2398 Toy 阅读全文
posted @ 2012-07-15 18:02 'wind 阅读(897) 评论(0) 推荐(0) 编辑
摘要: 1062*昂贵的聘礼枚举等级限制+dijkstra1087*APlugforUNIX2分匹配1094SortingItAllOutfloyd或拓扑1112*TeamThemUp!2分图染色+DP1125StockbrokerGrapevineFLOYD1135DominoEffect最短路1149*PIGS网络流1161*Wallsfloyd1201Intervals差分约束1236*NetworkofSchools强联通1251JungleRoadsMST1273DrainageDitches最大流 1274ThePerfectStall2分匹配1275*CashierEmployment差 阅读全文
posted @ 2012-07-15 18:00 'wind 阅读(832) 评论(0) 推荐(0) 编辑
摘要: startstart#define _CRT_SECURE_NO_DEPRECATE#include #include #include #include #include #include #include #include #include #include #include #include ... 阅读全文
posted @ 2014-11-27 20:58 'wind 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 题意:找出原串中出现超过2次的子串的数目,每个子串出现多次时不可重叠。分析:枚举子串的长度len,找到满足连续的height[i]>=len的最左端 l 和最右端的位置 r,如果r-l>=len说明子串没有重叠。View Code #include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 1005;int N;char s[maxn];int sa[maxn],t[maxn],t2[maxn],c[maxn];void s 阅读全文
posted @ 2013-02-15 17:59 'wind 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 题意:给出长度为n的数字序列,求重复出现次数不小于k的最长序列(连续)的长度。例如序列 1 2 3 2 3 2 3 1,k=2,那么序列2 3 2 3重复出现了两次,长度为4。分析:二分枚举长度,如果在height数组中连续出现超过k次的话就满足。View Code #include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 1000002;int s[maxn];int sa[maxn],t[maxn],t2[maxn],c[maxn 阅读全文
posted @ 2013-02-13 21:30 'wind 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 题意:Gardon是个怕麻烦的人(恩,就是爱偷懒的人),很显然将64个圆盘逐一搬动直到所有的盘子都到达第三个柱子上很困难,所以Gardon决定作个小弊,他又找来了一根一模一样的柱子,通过这个柱子来更快的把所有的盘子移到第三个柱子上。下面的问题就是:当Gardon在一次游戏中使用了N个盘子时,他需要多少次移动才能把他们都移到第三个柱子上?很显然,在没有第四个柱子时,问题的解是2^N-1,但现在有了这个柱子的帮助,又该是多少呢?分析:先将A柱子上的k个盘子通过四个柱子移动的D柱子上,在将剩下的n-k盘子通过三个柱子移动到C柱子上,在将D柱上的盘子通过四个柱子移动到C柱子上。 dp[i] = m.. 阅读全文
posted @ 2013-02-13 11:20 'wind 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 题意:还记得汉诺塔III吗?他的规则是这样的:不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到小盘的上面。xhd在想如果我们允许最大的盘子放到最上面会怎么样呢?(只允许最大的放在最上面)当然最后需要的结果是盘子从小到大排在最右边。分析:dp[i][0]表示将 i 个盘子从两边移动到中间的步数dp[i][1]表示将 i 个盘子从中间移动到两边的步数讲n个盘子从左边移动到右边的总步数为 dp[i-1][0]+dp[i-1][1]+2View Code #include <cstdio>#include <cstring>in 阅读全文
posted @ 2013-02-12 17:03 'wind 阅读(395) 评论(0) 推荐(0) 编辑
摘要: ................................目录..................................Round #167 (Div. 2)A.Dima and Friends 类型: 模拟题意:有n个朋友每个人出1~5中的一个数,自己可以出1~5中的任意一个数,把所有数的和加起来得到的m,从自己开始一次倒数 最后一个人扫地,问自己有多少种出法,自己不用扫地。分析:直接模拟View Code #include <cstdio>#include <cstring>#include <algorithm>#include < 阅读全文
posted @ 2013-02-12 12:03 'wind 阅读(269) 评论(0) 推荐(0) 编辑
摘要: A.Beautiful Year题意:找到大于y的第一个每位都不相同的年。View Code #include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;#define clr(x) memset(x,0,sizeof(x))int a[4];int main(){ int y; while (scanf("%d",&y)!=EOF) { y++; for (;;y++) { int x = ... 阅读全文
posted @ 2013-02-12 11:58 'wind 阅读(262) 评论(0) 推荐(0) 编辑
摘要: A.B.C.D.Good Sequences题意:从一个递增数字序列中找出一串最长的序列满足任意相邻的数字不互质。分析:The main idea is DP. Let's definedp[x]as the maximal value of the length of the good sequence whose last element isx, and defined[i]as the (maximal value ofdp[x]wherexis divisible byi).You should calculatedp[x]in the increasing order of 阅读全文
posted @ 2013-02-11 16:39 'wind 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 题意:给出n个塔和m堵墙,求出被围墙包围的区域有多少个。分析:并查集判断环的个数。View Code #include <cstdio>#include <cstring>int f[1001];int find(int x){ return f[x] == x?x:(f[x]=find(f[x]));}int main(){ int n, m; int i, j; int res = 0; while (scanf("%d %d",&n,&m)!=EOF) { res = 0; for (i=0; i<n; i++) ... 阅读全文
posted @ 2013-02-06 17:26 'wind 阅读(194) 评论(0) 推荐(0) 编辑
摘要: A.Games题意:有n个球队,两个之间会有比赛,每个球队有主场和客场的衣服并且颜色不同,当在自己主场比赛时,如果对方衣服和主场衣服颜色一样,就要穿客场衣服,问最多有多少场这样的情况。分析:直接暴力。View Code #include <stdio.h>#include <string.h>int h[33], a[33];int main(){ int n,i, j; while (scanf("%d",&n)!=EOF) { for (i=0; i<n; i++) scanf("%d %d",&h[i] 阅读全文
posted @ 2013-02-05 00:33 'wind 阅读(268) 评论(0) 推荐(0) 编辑
摘要: A.Fancy Fence题意:判断一个角是不是正多边形的内角。分析:如果 60<=d<180 &&360%(180-n)==0 就是符合的内角。View Code #include <stdio.h>#include <math.h>#include <string.h>int main(){ int t; int n; scanf("%d",&t); while (t--) { scanf("%d",&n); if (n<180 && n>=6 阅读全文
posted @ 2013-02-02 13:37 'wind 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 题意:可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救公主。不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出。现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用*表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且 阅读全文
posted @ 2013-02-02 11:59 'wind 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 题意:在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。分析:可以用母函数,也可以用DPdp[n][m]表示钱n用前m种硬币的兑换方式 [ 1 m = 1;dp(n, m) = [ dp(n, n) n < m; [ 1 + dp(n, n-1) n = m; [ dp(n, m-1) + dp(n-m, m) n > m > 1.dp_记忆化搜索#include <stdio.h>#include <string.h>int dp[3276... 阅读全文
posted @ 2013-01-31 13:14 'wind 阅读(291) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个由n个正整数组成的整数序列a1 a2 a3 ... an求按先后次序在其中取m段长度分别为l1、l2、l3...lm的不交叠的连续整数的和的最大值。分析:dp[i][j]表示前i个数中选j段所能构成的最大值dp[i][j]=max(dp[i-1][j], dp[i-len[j]][j-1]+sum) len[j]表示第j段的长度,sum表示长度为len[j]的连续序列的和。//dp[i][j]表示前i个数中选j段所能构成的最大值//dp[i][j]=max(dp[i-1][j], dp[i-len[j]][j-1]+sum) len[j]表示第j段的长度,sum表示长度为len[ 阅读全文
posted @ 2013-01-30 22:37 'wind 阅读(417) 评论(0) 推荐(0) 编辑
摘要: 题意:Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息:密码是一个C进制的数,并且只能由给定的M个数字构成,同时密码是一个给定十进制整数N(0<=N<=5000)的正整数倍(如果存在多个满足条件的数,那么最小的那个就是密码),如果这样的密码存在,那么当你输入它以后门将打开,如果不存在这样的密码......那就把门炸了吧.注意:由于宝藏的历史久远,当时的系统最多只能保存500位密码.因此如果得到的密码长度大于500也不能用来开启房门,这种情况也被认为密码不存在.分析:大数取模+广搜。注意0的 阅读全文
posted @ 2013-01-30 19:41 'wind 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 题意:在一个有12行12列的方形的武林世界里,少林、武当和峨嵋三派的弟子们在为独霸武林而互相厮杀。武林世界的第一行的一列格子的坐标是(1, 1),第一行第二列坐标是(1, 2)……右下角的坐标为(12, 12)。如图:少林派弟子总是在同一列回不停地行走。先往下走,走到头不能再走时就往上走,再到头则又往下走……比如,(1, 1) -> (2, 1) -> (3, 1)。武当派弟子总是在同一行来回不停地行走。先往右走,走到头不能再走时就往左走,再到头则又往右走……比如,(2, 1) -> (2, 2) -> (2, 3)。峨嵋派弟子总是在右下-左上方向来回不停走,先往右下方 阅读全文
posted @ 2013-01-30 14:55 'wind 阅读(666) 评论(0) 推荐(0) 编辑
摘要: 题意:有N个字母,每个字母的数量不定。用这N个字母组成一个长为M的串,并且规定这个串中每个字母能出现的次数。求这样的串的总数。分析:之前处理好组合数c[][],然后d[i]表示字符串长度为i的时候用所给字符串构成的满足条件的情况数,递推式: d[s[i][k]+j] += d[j]*c[m-j][s[i][k]];#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;#define clr(x)memset(x,0,sizeof(x))const int ma 阅读全文
posted @ 2013-01-29 15:52 'wind 阅读(693) 评论(1) 推荐(0) 编辑
摘要: 题意:判断圆是否与矩形相交。分析:分别判断矩形的四条边是否与圆相交即可,即转化为判断线段与圆是否相交。#include <stdio.h>#include <string.h>#include <math.h>const double eps = 1e-8;double rx[4],ry[4];double cx,cy,r;double mul(double x1,double y1,double x2,double y2){ return x1*y2-x2*y1;}double dis(double x1,double y1,double x2,doubl 阅读全文
posted @ 2013-01-29 15:36 'wind 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 题意:DU ACM集训队的队员在暑假集训时经常要讨论自己在做题中遇到的问题.每当面临自己解决不了的问题时,他们就会围坐在一张圆形的桌子旁进行交流,经过大家的讨论后一般没有解决不了的问题,这也只有HDU ACM集训队特有的圆桌会议,有一天你也可以进来体会一下哦:),在一天在讨论的时候,Eddy想出了一个极为古怪的想法,如果他们在每一分钟内,一对相邻的两个ACM队员交换一下位子,那么要多少时间才能得到与原始状态相反的座位顺序呢?(即对于每个队员,原先在他左面的队员后来在他右面,原先在他右面的队员在他左面),这当然难不倒其他的聪明的其他队友们,马上就把这个古怪的问题给解决了,你知道是怎么解决的吗?分 阅读全文
posted @ 2013-01-29 12:31 'wind 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 题意:生日Party结束的那天晚上,剩下了一些糖果,Gandon想把所有的都统统拿走,Speakless于是说:“可以是可以,不过我们来玩24点,你不是已经拿到了一些糖果了吗?这样,如果谁赢一局,就拿走对方一颗糖,直到拿完对方所有的糖为止。”如果谁能算出来而对方算不出来,谁就赢,但是如果双方都能算出或者都不能,就算平局,不会有任何糖果的得失。Speakless是个喜欢提前想问题的人,既然他发起了这场糖果大战,就自然很想赢啦(不然可就要精光了-_-)。现在他需要你的帮忙,给你他每局赢的概率和Gardon每局赢的概率,请你给出他可能获得这场大战胜利的概率。分析:Markov过程(马尔科夫过程)。f 阅读全文
posted @ 2013-01-29 12:07 'wind 阅读(525) 评论(0) 推荐(0) 编辑
摘要: 题意:Give you three sequences of numbers A, B, C, then we give you a number X. Now you need to calculate if you can find the three numbers Ai, Bj, Ck, which satisfy the formula Ai+Bj+Ck = X.即给出一个A数组,B数组,C数组,和S个询问,每个询问给出一个X值,问是否存在符合条件的等式。分析:可以用hash存下a数组和b数组中所有元素的和,然后可以用hash或者二分的方法查找是否存在x-ck即可。View Code 阅读全文
posted @ 2013-01-29 10:42 'wind 阅读(694) 评论(0) 推荐(0) 编辑
摘要: 题意: 知道了n 个基地的位置和m个炸弹的安放点,每个炸弹可以炸掉一行或一竖,炸掉的基地要从地图上去掉,对于每次操作输出该炸弹炸掉的基地个数。分析:用set集合容器,每去掉一个基地就从集合中删掉。#include <stdio.h>#include <string.h>#include <set>#include <map>#include <algorithm>using namespace std;typedef map<int,multiset<int> >line;map<int,multiset 阅读全文
posted @ 2012-11-05 21:33 'wind 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 2—sat建图总结1.元素关系有以下11种A[x]NOT A[x]A[x] AND A[y]A[x] AND NOT A[y]A[x] OR A[y]A[x] OR NOT A[y]NOT (A[x] AND A[y])NOT (A[x] OR A[y])A[x] XOR A[y]NOT (A[x] XOR A[y])A[x] XOR NOT A[y] And 结果为1:建边 ~x->y, ~y->x (两个数都为1)And 结果为0:建边 y->~x , x->~y(两个数至少有一个为0)OR 结果为1:建边 ~x->y , ~y->x(两个数至少有一个为 阅读全文
posted @ 2012-11-03 23:57 'wind 阅读(758) 评论(0) 推荐(0) 编辑
摘要: 题意: Zty很痴迷数学问题.。一天,yifenfei出了个数学题想难倒他,让他回答1 / n。但Zty却回答不了^_^. 请大家编程帮助他.输出1/n. (是循环小数的,只输出第一个循环节).分析: 找循环节的时候看看是否出现了相同的被除数即可。#include <stdio.h>#include <string.h>#define maxn 100010#define clr(x) memset(x,0,sizeof(x))int res[maxn];int vis[maxn];int main(){ int top, i; int k, t, n; scanf(& 阅读全文
posted @ 2012-11-03 14:00 'wind 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 题意: 知道了 n 个人的坐标和一个边长为R的正方形,问正方形内最多可以包含多少人。分析:离散化坐标,将y坐标映射到区间上,按x坐标从小到达扫描。#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;#define maxn 10005long long max(long long a, long long b){ return a>b?a:b;}struct seg{ long long x, y, val;}s[maxn*2];int add[max 阅读全文
posted @ 2012-11-03 13:09 'wind 阅读(359) 评论(0) 推荐(0) 编辑
摘要: 题意: 有n 个砖块,有不同的长宽高,分为三种类型,要求是: When di = 0 the block's length and width must be more or equal to the block's length and width which lies under the block. When di = 1 the block's length and width must be more or equal to the block's length which lies under the block and width and the 阅读全文
posted @ 2012-11-03 00:19 'wind 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 题意: 已知一个树形的地图,要在其间建设一条公路,每个公路上的点只经过一次,问如何建工路使得所有点到公路的最长距离最短。分析: 看成是找树上所有点中距离最远的路径,主要是两次广搜,第一次找到一个端点,第二次找到另一个,第二次找的过程中记录路径, 便于最后一次遍历全图找到答案。#include <stdio.h>#include <string.h>#define maxn 100005#define clr(x)memset(x,0,sizeof(x))struct node{ int to, next, w;}q[1000000];int tot;int head[m 阅读全文
posted @ 2012-11-02 23:51 'wind 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 题意:问一个1..n 的排列中,有多少组数满足 i < j < k 且 num[i] < num[k] < num[j].分析:符合条件的答案即为 小大中的情况总数,而 小大中 = 小XX - 小中大 可以求出每个数前面小于它的数的个数x,和后面大于它的个数y, 那么每个数对应的 小XX 数量为 y*(y-1)/2 每个数对应的小大中数量为 x*y#include <stdio.h>#include <string.h>#define mod 100000007long long a[100005];int n;int lowbit(int x) 阅读全文
posted @ 2012-11-02 07:15 'wind 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 题意:输入两个非负整数a, b,找到非负的整数 X, Y使其满足 X*a + Y*b = 1.#include <stdio.h>#include <string.h>void extend_gcd(int a, int b, int& d, int& x, int& y){ if(!b) { d = a; x = 1; y = 0; } else { extend_gcd(b, a%b, d, y, x); y -= x*(a/b); }}int main(){ int a, b... 阅读全文
posted @ 2012-11-01 23:05 'wind 阅读(188) 评论(0) 推荐(1) 编辑