随笔分类 -  ACM-POJ

POJ 2549 Sumsets hash值及下标
摘要:题目大意:找到几何中的4个数字使他们能够组成 a+b+c=d ,得到最大的d值我们很容易想到a+b = d-c那么将所有a+b的值存入hash表中,然后查找能否在表中找到这样的d-c的值即可因为4个数字都不能相同,那么我们同时要在hash表中记录相加两个数的下标,然后查找的时候还要进行下标判断这里用... 阅读全文
posted @ 2015-06-02 13:26 Love风吟 阅读(737) 评论(0) 推荐(0)
POJ1690 简单运算去括号
摘要:题目大意:给定一串只含加减和括号的运算,去掉没用的括号和空白字符输出这里其实只要去找当前括号前面那个运算符是不是减号,如果是减号且这个括号内出现过运算符说明这个括号应该存在 1 #include 2 #include 3 #include 4 #include 5 6 using name... 阅读全文
posted @ 2015-06-02 12:39 Love风吟 阅读(455) 评论(0) 推荐(0)
POJ 2002 几何+hash
摘要:题目大意:给定1000个点,寻找有多少组四点对能组成正方形这里的题目跟上一道做的找平行四边形类似但想法却又不相同的方法这里找任意2个点形成的一条边,那么可以根据这两个点,找到能和他们组成正方形剩下的两个点的位置,根据hash表去搜索,如果这两个位置存在自己需要的点,说明这种方案可行添加查找均交给ha... 阅读全文
posted @ 2015-06-01 19:46 Love风吟 阅读(281) 评论(0) 推荐(0)
POJ 1971 Parallelogram Counting
摘要:题目大意:给定1000个点,求有多少组4个点可以形成平行四边形这里可以找到一个特别关键的点在于如果能形成平行四边形,2个点的中点必然相交那么只要将所有点的中点都计算出来,然后排个序计算出现的次数即可,这里算中点可能会出现小数,可以直接不除以2,这样是中点的2倍也没问题 1 #include 2 #... 阅读全文
posted @ 2015-06-01 16:47 Love风吟 阅读(264) 评论(0) 推荐(0)
POJ 1635 树的最小表示法
摘要:题目大意:用一堆01字符串表示在树上走动的路径,0表示往前走,1表示往回走,问两种路径方式下形成的树是不是相同的树我们可以利用递归的方法用hash字符串表示每一棵子树,然后将所有子树按照字典序排序,来判断这个hash字符串是否相同 1 #include 2 #include 3 #include... 阅读全文
posted @ 2015-06-01 10:57 Love风吟 阅读(316) 评论(0) 推荐(0)
POJ 1379 (随机算法)模拟退火
摘要:题目大意:给定一堆点,找到一个点的位置使这个点到所有点中的最小距离最大这里数据范围很小,精度要求也不高,我们这里可以利用模拟退火的方法,随机找到下一个点,如果下一个点比当前点优秀就更新当前点参考:http://www.cnblogs.com/heaad/archive/2010/12/20/1911... 阅读全文
posted @ 2015-05-26 14:05 Love风吟 阅读(238) 评论(0) 推荐(0)
POJ 3415 后缀数组+单调栈
摘要:题目大意:给定A,B两种字符串,问他们当中的长度大于k的公共子串的个数有多少个这道题目本身理解不难,将两个字符串合并后求出它的后缀数组然后利用后缀数组求解答案这里一开始看题解说要用栈的思想,觉得很麻烦就不做了,后来在比赛中又遇到就后悔了,到今天看了很久才算看懂首先建一个栈,从栈底到栈顶都保证是单调... 阅读全文
posted @ 2015-05-20 01:26 Love风吟 阅读(1024) 评论(0) 推荐(1)
POJ 1724 二维费用最短路
摘要:题目大意:有N个城市,编号1-N有R条路,每条路(单向)的起点为Si,终点为Di,长度为Li,如果要走这条路需要花Ti的钱现在你只有K元钱,求在不超支的前提下,从1走到N需要的最短距离这里总是希望路程尽可能的短,那么利用dijkstra的方法来解决问题,总是先扩展距离近的点,这样能更快的找到终点的最... 阅读全文
posted @ 2015-05-14 22:09 Love风吟 阅读(317) 评论(0) 推荐(0)
POJ 2288 汉密尔顿回路 DP解决
摘要:题目大意:有n个岛屿,令Vi为岛屿Ci的权值。一条汉密尔顿路径C1,C2,C3...Cn的值为3部分第一部分,将路径中的岛的权值相加,第二部分将每条边上的(Ci,Cj),加上所有的Vi*Vj第三部分,如果连续经过的3个城市可以形成3角联通,那么加上Vi*Vj*Vk求出一条路径使其权值最大,并记录有多... 阅读全文
posted @ 2015-04-30 13:03 Love风吟 阅读(440) 评论(0) 推荐(0)
poj 2337 && zoj 1919 欧拉回路+连通性判断
摘要:题目要求按字典序排列,而且可能有重边所以一开始就将数组从大到小排列,那么我将字符串加入链表时就会令小的不断前移,大的被挤到后面这里有一点问题就是我一开始使用的是qsort:int cmp(const void *s1 , const void *s2){ return strcmp((char*)s... 阅读全文
posted @ 2015-04-30 10:49 Love风吟 阅读(172) 评论(0) 推荐(0)
poj 1780 , poj 1392 欧拉回路求前后相互衔接的数字串
摘要:两道题目意思差不多第一题是10进制,第二题是2进制的都是利用欧拉回路的fleury算法来解决因为我总是希望小的排在前面,所以我总是先将较小数加入栈,再利用另一个数组接收答案,但是这里再从栈中导出来答案要倒一下了,这一点要注意poj 1780 1 #include 2 #include 3 #in... 阅读全文
posted @ 2015-04-29 23:44 Love风吟 阅读(302) 评论(0) 推荐(0)
POJ 3261 字符串上的k次覆盖问题
摘要:题目大意:给定一个数组,求一个最大的长度的子串至少出现过k次一个子串出现多次,也就是说必然存在2个子串间的前缀长度为所求的值通过二分答案,通过线性扫一遍,去判断出现次数,也就是说每次遇见一个height[i] , 出现次数就加1,否则重置为1 1 #include 2 #include 3 #i... 阅读全文
posted @ 2015-04-03 02:16 Love风吟 阅读(327) 评论(0) 推荐(0)
POJ 1743 后缀数组
摘要:题目大意找到一个连续的子序列连续出现过两次,且这两次不相交,只要子序列中每个数都加/减一个数得到一个新的序列,也可以看作是相同的那么也就是说这道题目可以转化成找到两个子序列,这两个子序列中每个数前后的差值是相等的所以我们可以求所有数两两之间的差值,然后根据这个值建立后缀数组后,二分答案来解决问题 1... 阅读全文
posted @ 2015-04-02 23:23 Love风吟 阅读(142) 评论(0) 推荐(0)
POJ 3264 RMQ问题 用dp解决
摘要:1 #include 2 #include 3 #include 4 using namespace std; 5 const int N = 50010; 6 #define INF 0x3f3f3f3f 7 int maxn[N<<1][18] , minn[N<<1][18] , a[... 阅读全文
posted @ 2015-04-02 12:31 Love风吟 阅读(185) 评论(0) 推荐(0)
POJ 1679 判最小生成树的不唯一性 或 利用次小生成树求解
摘要:题目大意:给定一个无向图,寻找它的最小生成树,如果仅有一种最小生成树,输出所有边的和,否则输出unique!根据kruscal原理来说,每次不断取尽可能小的边不断添加入最小生成树中,那么可知如果所有边的长度都不相同,那么kruscal取得过程必然只有一种情况,由小到大所以要是存在多种情况的最小生成树... 阅读全文
posted @ 2015-03-24 10:13 Love风吟 阅读(363) 评论(0) 推荐(0)
POJ 2479 两段连续最大和
摘要:题目大意:在一组数中,找到连续的两段 , 是这两段相加和达到最大这里利用dp[2][N]的数组保存所有的状态dp[0][i]表示取到第i个数时只取了一段的最大和,第i个数是一定要被取到的dp[1][i]表示取到第i个数时取了2段的最大和,第i个数是一定要被取到的而题目所求答案就是所有dp[1][i]... 阅读全文
posted @ 2015-03-14 18:21 Love风吟 阅读(353) 评论(0) 推荐(0)
POJ 3469 网络流最小割
摘要:将两个CPU分别视作源点和汇点对于那些不在同一个CPU中的模块会产生的代价作为一条双向的容量弧这里每个模块可以在任意一个CPU中运行,相当于寻找一个割,分割后,在S集合中的模块安装在第一个CPU中那么在T集合中的模块就是在第二个CPU中,所求的最小割也正是最小耗费根据最大流=最小割的原理,这里相当于... 阅读全文
posted @ 2015-02-10 15:43 Love风吟 阅读(215) 评论(0) 推荐(0)
POJ 1850
摘要:一道比较复杂的模拟题一步步从字母的最前方计算到最后方即可 1 #include 2 #include 3 4 using namespace std; 5 #define ll long long 6 7 ll sum[10]; 8 char s[12]; 9 10 void init()1... 阅读全文
posted @ 2015-01-23 15:32 Love风吟 阅读(167) 评论(0) 推荐(0)
POJ 2356 && POJ 3370 鸽巢原理
摘要:POJ 2356:题目大意:给定n个数,希望在这n个数中找到一些数的和是n的倍数,输出任意一种数的序列,找不到则输出0这里首先要确定这道题的解是必然存在的利用一个 sum[i]保存前 i 个数的和对n的取模sum[0] = 0;那么sum[0] ~ sum[n]有n+1个数据,这些数据的范围都是 0... 阅读全文
posted @ 2015-01-23 14:52 Love风吟 阅读(305) 评论(0) 推荐(0)
POJ 3270 置换群问题
摘要:题目大意是:每头牛都有一个对应的值a[i],现在给定一个初始的牛的序列,希望通过两两交换,能够使这些牛按值升序排列,每次交换都会耗费一个 a[i]+a[j]希望耗费最小,求出这个最小耗费个人觉得这道题还是蛮有意思的,虽然我wa了很多发,但还是很值得思考一下的这是一个置换群问题,但是我们首先要根据其值... 阅读全文
posted @ 2015-01-22 23:05 Love风吟 阅读(334) 评论(0) 推荐(0)