POJ
kalilili
双眼闭三年。
展开
-
POJ 3134 - Power Calculus (IDDFS)
题意:求只用乘法和除法最快多少步可以求到x^n思路:迭代加深搜索//Accepted 164K 1094MS C++ 840Binclude#include#include#includeusing namespace std;int step[100005];int n;int cur;bool IDDFS(int lim,int g){ if(cur>li原创 2015-03-15 21:27:20 · 779 阅读 · 0 评论 -
POJ 2115-C Looooops(基础一元线性同余方程)
题意:对于C的for(i=A ; i!=B ;i +=C)循环语句,问在k位存储系统中循环几次才会结束。若在有限次内结束,则输出循环次数。否则输出FOREVER思路:易列出同余方程:x*C+y*2^k = B-A用拓展gcd求解即可//148K 0MS C++ 808B#include#include#include#includ原创 2015-04-07 00:34:46 · 1426 阅读 · 0 评论 -
POJ2375 Cow Ski Area (添最少边构造强连通分量的某个与入度出度相关的结论)
题意:本题描述了一片滑雪场,并且规定奶牛从一个点只能向它相邻的并且高度不大于它的点运动,现在想要在某些点对之间加上缆车使得奶牛也可以从较低点到达较高点,问最少需要多少辆这样的缆车就可以使得奶牛可以从任意一个点运动到滑雪场的每个角落。思路:即问至少加多少条边使图变成强联通图,先缩点成DAG。不难知道强连通分量的所有节点的入度和出度均不为0,可以统计DAG上的入度和出度为0的个数分别是a,b。原创 2015-04-19 01:37:50 · 1451 阅读 · 0 评论 -
POJ 1523 SPF(割点)
大致题意: 给出一个连通的无向图,求哪些点是割点,对于每个割点,求出去掉这个点后连通分量的个数。如果没有割点的话输出“ No SPF nodes”。思路:求割点用tarjan即可,然后要求删除割点后连通分量的个数,每次找到割点,再在从割点dfs即可,也可以直接在tarjan算法中记录child个数。那么如果割点是根,那么答案就是child,不是根的割点答案是child+1//1原创 2015-04-23 22:03:32 · 863 阅读 · 0 评论 -
POJ 3233 - Matrix Power Series(等比矩阵求和)
题意:矩阵求和思路:用二分幂解决,和等比数列求和的二分方法一样等比数列求和法(摘自http://blog.csdn.net/acdreamers/article/details/7851144 ACdreams)有效地求表达式的值:(1)当时,(2)当时,那么有 (3)当时,那么有 当n是奇数时作者做了一步优化,隔离出原创 2015-04-07 22:28:54 · 1910 阅读 · 0 评论 -
POJ 1006 生理周期(中国剩余定理)
生理周期Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 118302 Accepted: 37136Description人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相原创 2015-04-08 11:05:33 · 634 阅读 · 0 评论 -
POJ 3592 Instantaneous Transference(建图强连通+单源最长路)
题目大意:有一张n*m的地图,每个点上可能是数字,代表矿石的数目,可能是*,表示一个传送阵,送往某个坐标,可能是#,代表不通。每次矿车只能往右方或者下方走一格,问从(0,0)点出发可以最多收集到多少矿石思路:先根据矿车的可移动的方向建有向图,“*”导致可能会有环,所以先缩点变成有向无环图。然后就是DAG上的最长路问题(拓扑排序+dp)而且也是单源最长路问题,可以用最短路算法去做原创 2015-04-20 16:06:32 · 707 阅读 · 0 评论 -
POJ 3678 Katu Puzzle (2-sat基础)
题意:每个数只有0,1两种可能,给出两两之间的AND,OR,XOR的值,判断有没有解裸题。#include#include#include#includeusing namespace std;const int N = 2010;struct Edge{ int v,next;}es[N*N];int head[N];int n,m;int tmp[N],原创 2015-05-13 15:27:18 · 667 阅读 · 0 评论 -
POJ 3207 Ikki's Story IV - Panda's Trick(2-sat判解存在性)
题意:平面上,一个圆,圆的边上按顺时针放着n个点。现在要连m条边,比如a,b,那么a到b可以从圆的内部连接,也可以从圆的外部连接。给你的信息中,每个点最多只会连接的一条边。问能不能连接这m条边,使这些边都不相交。算比较裸的题目了,关键找到如何判断两对点交不交叉的关系就好#include#include#include#include#includeusing namespac原创 2015-05-13 15:18:37 · 631 阅读 · 0 评论 -
POJ 2296 Map Labeler(二分边长+2-sat判解)(经典题)
题意:给你n个点,要你在这n个点上放一个正方形,点只能在正方形的上边或下边的中点上,所有正方形大小一样,不能重叠,求最大的正方形。经典的题目,找约束关系要经过一些讨论。//320 KB 16 ms #include#include#include#includeusing namespace std;const int N = 222;int n;struc原创 2015-05-13 15:23:13 · 767 阅读 · 0 评论 -
POJ 3352 Road Construction(添最少边构造边双连通图的结论)
题意:已知无向图,问添加最少的边使之成为边双连通图思路:显然先缩点成一棵树,添加最少边使一棵树的边双连通此处有结论:对于一棵树添加(1+leaf)>>1 条无向边就能构造成一个双连通图,构造方法显然(脑补一下 //216K 63MS C++ 1754B #include #include #include #include原创 2015-04-23 22:12:18 · 1006 阅读 · 0 评论 -
POJ 2785 4 Values whose Sum is 0(折半枚举)
4 Values whose Sum is 0Time Limit: 15000MS Memory Limit: 228000KTotal Submissions: 17088 Accepted: 4998Case Time Limit: 5000MSDescriptionThe SUM problem c原创 2015-07-06 20:27:46 · 874 阅读 · 0 评论 -
数组左旋转k位 std::rotate() POJ 1978
题意:模拟一个洗牌操作。先输入两个正整数N和R,N表示有N张牌,R表示有R次操作。然后再是有R行,每行有两个正整数p和c,表示从p开始数起c张要放到牌顶。现在问你:经过R次操作后,这N张牌的首张牌是什么数字?注意:牌的数字是倒着排列的。样例解释1:5 2 //5张牌 2次洗牌 当前序列:5 4 3 2 13 1//从第三张牌数起 到 第四张牌 要放到牌顶。(注意:这里有一个数字放到原创 2016-03-27 13:03:51 · 890 阅读 · 0 评论 -
POJ 2774 Long Long Message(最长公共子串 -初学后缀数组)
后缀数组的两篇神论文:国家集训队2004论文集 许智磊算法合集之《后缀数组——处理字符串的有力工具》很多人的模版都是用论文上的包括kuangbin的模版:(DA算法)模版中比较难理解的地方有两点1.按关键词排序 2.把字符串长度增加一位按关键词排序的意思其实是基数排序中相当把两位数排序时先排个位,再排十位这里也一样先排后2^k原创 2015-03-17 16:14:13 · 782 阅读 · 0 评论 -
POJ 2891 Strange Way to Express Integers(一元线性同余方程组模版题)
题意:给出n个模方程组:x mod ai = ri。求x的最小正值。如果不存在这样的x,那么输出-1.涉及的数论知识:对于一般式ax ≡ b(mod m)当a=1时,两个同余方程就可以合并成一个同余方程比如对于本题:x mod a1=r1x mod a2=r2有不定方程:x=r2+a2*y2x=r2+a2*y2联立:a1y1+原创 2015-04-06 22:53:20 · 984 阅读 · 0 评论 -
POJ 1061 青蛙的约会(初遇扩展gcd--解最小正整数解)
青蛙的约会Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 94253 Accepted: 17425Description两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到原创 2015-04-01 21:16:34 · 744 阅读 · 0 评论 -
POJ 2250 Compromise(最长公共子序列)
CompromiseTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 6750 Accepted: 3018 Special JudgeDescriptionIn a few months the European Currency Union原创 2015-04-03 22:58:01 · 925 阅读 · 0 评论 -
POJ 1655 Balancing Act(求树的重心--树形DP)
题意:求树的重心的编号以及重心删除后得到的最大子树的节点个数size,如果size相同就选取编号最小的.思路:随便选一个点把无根图转化成有根图,dfs一遍即可dp出答案//1348K 125MS C++ 1127B#include#include#include#include#includeusing namespace std;int n;const int N= 20原创 2015-03-15 09:19:40 · 847 阅读 · 0 评论 -
POJ 2676/2918 数独(dfs)
思路:记录每行每列每个宫已经出现的数字即可,数据比较弱另外POJ 3074 3076 必须用剪枝策略,但实现较麻烦,还是以后学了DLX再来做吧//Accepted 160K 0MS #include#include#include#includeusing namespace std;const int N =15;char sudo[N][N];bool visr[N][原创 2015-03-15 14:55:45 · 787 阅读 · 0 评论 -
POJ 1849 Two(树的直径--树形DP)(好题)
大致题意:在某个点派出两个点去遍历所有的边,花费为边的权值,求最少的花费思路:这题关键好在这个模型和最长路模型之间的转换,可以转换得到,所有边遍历了两遍的总花费减去最长路的花费就是本题的答案,要思考,而且答案和派出时的起点无关求最长路两遍dfs或bfs即可,从任意点bfs一遍找到最长路的一个终点,再从这个终点bfs找到起点//1032K 79MS C++ 1455B #include原创 2015-03-15 10:55:09 · 1228 阅读 · 0 评论 -
POJ 3260 The Fewest Coins(混合背包+鸽巢原理)
题意:有某些硬币,已知某人分别有这些硬币数ci,卖家有这些硬币无限数量,已知待买的商品价格,求这个人所花的硬币数加上找零的硬币数的和最少是多少思路:不难看出一个多重背包和完全背包即可主要难点在于那个人应该出多少钱?出钱的上界是什么,一开始我以为只要出了超过最大面额的钱就可以了,结果wa后意识到错了但也没想到如何确定上界的方法。看了别人的博客学到:出钱的上界不会超过最大面额(mmax)的原创 2015-03-26 11:03:56 · 1211 阅读 · 0 评论 -
POJ 2063 Investment(完全背包--容量变化)
题目大意:给你一笔金额,你要将这比金额去投资,现在有t种股票,每种股票都有一个价值和年收益,问你如何投资在n年后的最大收益思路:由于获益后的钱加上本金可以再来投资,所以背包容量变化,这点还是不难的,主要本题给了一个信息:股票的价值都是1000的倍数,所以后面可以空间优化,对每个价值除以1000对背包容量优化#include#include#include#includeusing原创 2015-03-26 11:09:39 · 1122 阅读 · 0 评论 -
POJ 2449 Remmarguts' Date(A* - 第K短路)
题意:找第K短路的值思路:A*,bfs找K短路的时候加上估计函数(距离下界),而且要满足:cost(u,v)+h*(u)-h*(v)>=0因为这是bfs'需要的下界函数,不是任何下界都可以,不像IDA*,这里的下界必须让每个bfs的节点保持原样的大小关系而IDDFA中的A*下界函数就不需要这个性质了,只要是下界即可。显然这个具体问题的天然的估计函数就是从此点到目标点的最短路。#原创 2015-03-16 23:41:37 · 641 阅读 · 0 评论 -
POJ 1743 Musical Theme (后缀数组,求最长不重叠重复子串)
题意:有N(1 “主题”是整个音符序列的一个子串,它需要满足如下条件:1.长度至少为5个音符2.在乐曲中重复出现(可能经过转调,“转调”的意思是主题序列中每个音符都被加上或减去了同一个整数值。)3.重复出现的同一主题不能有公共部分。思路:是要求最长不重叠重复的子串,如果没有不重叠的限制条件,那么height中的最大值即可现在对于这题需要二分出答案,二分出最长重复子串原创 2015-03-17 20:22:50 · 752 阅读 · 0 评论 -
POJ 2486-Apple Tree(树形DP)(难)
题意:一颗树,n个点(1-n),n-1条边,每个点上有一个权值,求从1出发,走V步,最多能遍历到的权值思路:(思路转自http://blog.csdn.net/libin56842/article/details/10101807)树形dp,比较经典的一个树形dp。首先很容易就可以想到用dp[root][k]表示以root为根的子树中最多走k时所能获得的最多苹果数,接下去我们很习惯原创 2015-03-29 08:48:22 · 1451 阅读 · 0 评论 -
POJ 1463 Strategic game(树形DP-树上的点集覆盖模型)
题意:一城堡的所有的道路形成一个n个节点的树,如果在一个节点上放上一个士兵,那么和这个节点相连的边就会被看守住,问把所有边看守住最少需要放多少士兵。思路:和最大独立集的思路差不多,转移方程差不多,用0,1表示子树的根放不放士兵 dp[root][0] += dp[son][1]; dp[root][1] += min(dp[son][1],dp[son][原创 2015-03-29 09:06:12 · 926 阅读 · 0 评论 -
POJ 1185 炮兵阵地 (状态DP--经典题)
本题的难度给跪了,完全不是自己的能力范围内,看了别人的解题报告才写的摘自http://blog.csdn.net/woshi250hua/article/details/7736045题目大意:给定一张n*m的地图,地图上有平原p,有山地h,可以在平原p打炮,俗称野战,打炮方向有四个,上下左右,射程是2,要求两个炮不能相互打到,问符合这个要求的情况最多打几个炮?n 解题思路:经原创 2015-03-29 09:26:30 · 738 阅读 · 0 评论 -
POJ 2046 Power Strings(连续重复串重复次数--后缀数组)
连续重复串:如果一个字符串L 是由某个字符串S 重复R 次而得到的,则称L 是一个连续重复串。R 是这个字符串的重复次数。题意:求连续重复串的最大重复次数R思路:当然可以用kmp。用后缀数组的话,穷举字符串S 的长度k,然后判断是否满足。判断的时候,先看字符串L 的长度能否被k 整除,再看suffix(0) suffix(k)的最长公共前缀是否等于n-k。在询问最长公共前缀原创 2015-03-19 22:00:29 · 847 阅读 · 0 评论 -
POJ 3261 Milk Patterns (离散化+后缀数组 k次最长重复子串(可重叠))
题意:给定一个字符串,求至少出现k 次的最长重复子串,这k 个子串可以重叠。思路:仍是二分出长度再以长度把height数组分类,再判是否存在k次因为只有20000个数,但是数的范围是1000000 所以先离散化后基数排序效率将大大提高。//Accepted 860K 47MS#include#include#include#includeusing namespace std原创 2015-03-17 22:09:15 · 558 阅读 · 0 评论 -
POJ 3415 Common Substrings(长度不小于k 的公共子串的个数--后缀数组+单调栈优化)
题意:给定两个字符串A 和B,求长度不小于k 的公共子串的个数(可以相同)。样例1:A=“xx”,B=“xx”,k=1,长度不小于k 的公共子串的个数是5。样例2:A =“aababaa”,B =“abaabaa”,k=2,长度不小于k 的公共子串的个数是22。思路:如果i后缀与j后缀的LCP长度为L, 在L不小于K的情况下, 它对答案的贡献为L - K + 1. 于是原创 2015-03-31 22:15:29 · 776 阅读 · 0 评论 -
POJ 3905 Perfect Election (初学2-Sat)
这篇从原理上理解2-sat如何转化成图论问题简述了如何了实现算法:http://wenku.baidu.com/view/31fd7200bed5b9f3f90f1ce2.html总的来说2-sat有两种算法,一种用dfs染色搜索出一种解,一种用tarjan(判定是否有解)+拓扑排序构造出任意一个可行解。dfs从理论上复杂度很高,但是实际上远远达不到上界,而且可以按字典序搜索,实现也简单多原创 2015-04-23 22:22:04 · 722 阅读 · 0 评论