
POJ
Tuesday..
这个作者很懒,什么都没留下…
展开
-
POJ 2311 Cutting Game【SG函数,子游戏终态】
题目链接:http://poj.org/problem?id=2311题意:给定一张纸,由w×h(2≤w,h≤200)w \times h(2 \le w,h \le 200)个方格组成,两个人轮流横着或者竖着剪一刀,接下来在剪完的所有纸中选择一张继续剪,问谁最先剪出1×11 \times 1的方格。分析:假设(w,h)(w,h)的纸剪一刀之后变成(w1,h1),(w2,h2)(w_1,h_1),原创 2016-07-30 23:47:51 · 1110 阅读 · 2 评论 -
POJ 1661 Help Jimmy【DP】
基础DP,过程想明白了其实也不复杂,从上面的推下面的比倒着推要简单很多。调试了半个多小时。。简单dp依然不能快速AC。。SAD。。题目链接:http://poj.org/problem?id=1661题意:Jimmy从坐标为x,高度为y的点向下跳,每次只能跳到平台上或者地面上,跳到平台上必须跑到平台边缘才能继续下跳。问最少多少时间跳到地面。分析:注意:对于每个平台左右两边都可以跳,需要分别记录最短原创 2016-04-05 11:30:36 · 872 阅读 · 2 评论 -
POJ 2965 The Pilots Brothers' refrigerator【BFS+状压 Or 脑洞】
题目链接:http://poj.org/problem?id=1753题意:给定冰箱门的开关情况,改变一个门则其所在行列的门都会发生改变,求出改变门的最少操作使得最终所有门都是打开状态。代码:bfs+状态压缩很容易想到~~ 这里的状态压缩要需要多加小心,注意一下存储的是翻转门的情况~#include<iostream>#include<cstdio>#include<queue>using原创 2016-03-22 23:15:33 · 398 阅读 · 0 评论 -
POJ 1094 Sorting It All Out【拓扑排序】
题目链接:http://poj.org/problem?id=1094题意:给定前n个字母的大小关系,问你是否根据前xxx个关系得到上升序列所有关系都无法确定唯一的一个序列第xxx个关系导致出现环分析:此题坑略多。。。。m大小没给!!这个很无语啊。。。数组开大点马上AC了。。。无法确定序列必须最后判断。一旦可以判断出上升序列,就不用管后面是否出现闭环了~~ where xxx is原创 2016-03-22 20:21:54 · 290 阅读 · 0 评论 -
POJ 1753 Flip Game【枚举】
题目链接:http://poj.org/problem?id=1753题意:给定白块黑块排列,每次换一个块的颜色,其上下左右的块也会被换成相反的颜色。问最少翻多少块,使得最终方格变为全白或者全黑~分析:典型的枚举。 这种问题被称为开关问题,关键是要对周围的块翻动对自身的影响进行记录。后一排决定了前一排的最终状态,枚举第一排的情况即可。代码:#include<iostream>#include<c原创 2016-03-22 14:02:24 · 355 阅读 · 0 评论 -
POJ 3279 Fliptile【枚举】
题意:又是农夫和牛的故事。。。有m*n个黑白块,黑块的背面是白块,白块背面是黑块,一头牛踩一块,则这个块的上下左右的方块都会转动,问至少踩多少块,才会使所有块都变成白色?分析:还是开关问题,同样是一个块的转动会影响其他块的状态,但这次不是简单的线性排列,也不能只踩黑块。首先根据字典序,我们可以对第一排从 00…00到11..11进行考虑(1表示踩),再后续一排一排的考虑。因为踩一块四周的块都会转动原创 2016-02-10 15:34:42 · 573 阅读 · 0 评论 -
POJ 2686_Traveling by Stagecoach【状态压缩DP】
题意:一共有m个城市,城市之间有双向路连接,一个人有n张马车票,一张马车票只能走一条路,走一条路的时间为这条路的长度除以使用的马车票上规定的马车数,问这个人从a出发到b最少使用时间。分析:状态压缩dp,用dp[i][j]dp[i][j]表示到达jj城市的最小时间,其中ii为剩余车票的集合。集合ii使用状态压缩的表示方法。由于剩余车票的集合不断变小,实际上为求DAG最短路问题。代码:#include<原创 2016-02-16 17:07:44 · 448 阅读 · 0 评论 -
POJ 3276 Face The Right Way【枚举】
题意:N头牛站成一条线,分别朝向前后两个方向,机器可以使连续K头牛同时改变方向,要求所有牛最终朝向前方,问机器操作次数的最小值及此时的最小K值。分析:第一眼看感觉是二分搜索K,再仔细读题, please help him determine the minimum value of K that minimizes the number of operations required by the原创 2016-02-09 18:50:36 · 407 阅读 · 0 评论 -
POJ 2488 A Knight's Journey【DFS】
补个很久之前的题解。。。。题目链接:http://poj.org/problem?id=2488题意:马走“日”字,让你为他设计一条道路,走遍所有格,并输出字典序最小的一条。分析:dfs~~~代码:#include<iostream>#include<cstring>#include<algorithm>using namespace std;typedef pair<int, int>pi原创 2016-03-21 20:33:18 · 293 阅读 · 0 评论 -
POJ 3469_Dual Core CPU
题意:N个模块可以在A,B两个核上运行,分析:用最小的费用将两个对象分成两个集合的问题,常常可以转换为最小割问题。 按照N个模块在哪个核上运行分成两个集合。并建边使最小费用等于最小割的容量,即转化为求图中最大流。代码:#include<cstdio>#include<vector>#include<cstring>#include<queue>using namespace std;st原创 2016-02-23 23:19:01 · 311 阅读 · 0 评论 -
POJ 3723 Conscription【最小生成树】
题意:征用一些男生和女生,每个应都要给10000元,但是如果某个男生和女生之间有关系,则给的钱数为10000减去相应的亲密度,征集一个士兵时一次关系只能使用一次。分析:kruskal求最小生成树,注意男生和女生用偏移量处理。代码:#include<iostream>#include<algorithm>#include<cstdio>using namespace std;struct ed原创 2016-02-11 11:08:57 · 477 阅读 · 0 评论 -
POJ 3041_Asteroids
题意:N*N网格中有小行星,光束能将一整行或者一整列的行星消灭,问消灭所有行星至少需要多少光束?分析:最小顶点覆盖问题,将每个小行星看成边,左右顶点为横纵坐标,可以转化为二分图,利用二分图中最小顶点覆盖等于最大二分匹配的性质,求出最大二分匹配即可。代码:#include<cstdio>#include<vector>#include<cstring>using namespace std;c原创 2016-02-22 16:46:11 · 329 阅读 · 0 评论 -
POJ 1328 Radar Installation【贪心 区间问题】
题目链接:http://poj.org/problem?id=1328题意:在x轴上有若干雷达,可以覆盖距离d以内的岛屿。 给定岛屿坐标,问至少需要多少个雷达才能将岛屿全部包含。分析:对于每个岛屿,计算出可以包含他的雷达所在的区间,找到能包含最多岛屿的区间即可。 可以看出这是一个典型的区间问题,我们有几种备选方法: (1)优先选取右端点最大的区间。 (2)优先选取长度最长的区间。 (3)优原创 2016-03-23 11:49:48 · 406 阅读 · 0 评论 -
POJ 2135_Farm Tour
题意:从出发点到目的地往返一次,道路ii连接着aia_i号和bib_i号,长度为cic_i。同一条路只能走一次,求最小路径长度。分析:如果没有往返,那么就是简单的最短路问题。如果规定严格从左到右,那么就是简单的双调旅行商问题。对于本题,同样还是将往返看成是从出发地开始的两条没有公共边的路径,便可以转化为求流量为2的最小费用流了~注意边为无向边代码:#include<cstdio>#include<原创 2016-02-27 19:12:49 · 331 阅读 · 0 评论 -
POJ 2109 Power of Cryptography【高精度+二分 Or double水过~~】
题目链接:http://poj.org/problem?id=2109参考:http://blog.youkuaiyun.com/code_pang/article/details/8263971题意:给定n,pn,p,求kk使得kn=pk^n=p(1≤n≤2001\le n\le 200, 1≤p<101011 \le p\lt 10^{101}, 1≤k≤1091\le k\le {10^9})分析:高精度原创 2016-03-24 14:32:57 · 440 阅读 · 0 评论 -
POJ 1740 A New Stone Game【博弈】
题目链接:http://poj.org/problem?id=1740题意:nn堆棋子,每次可以从一堆中拿出任意多个任意分配到其他非0的堆中,谁没有棋子可拿谁输,问先手是否赢。分析:好智障啊,题意就没搞清楚,一直以为是拿出来的只能放到一个非0堆中,其实是随意放在任何非0堆中!这很关键! 博弈的关键做出对称状态后再完全模仿对手 后手如果有条件完全模仿先手的状态,那么后手一定会赢。 如果堆数为偶数原创 2016-07-30 17:01:55 · 804 阅读 · 0 评论 -
POJ 1704 Georgia and Bob【博弈】
题目链接:http://poj.org/problem?id=1704题意:给定棋子及其在格子上的坐标,两个人轮流选择一个棋子向左移动,每次至少移动一格,但是不可以碰到其他棋子。无路可走的时候视为输。问最后谁赢。分析:将棋牌上的棋子两两看成一组,将他们之间的空格看成棋子,这样就可以转化为Nim游戏 右边的棋子向左走相当于从堆中拿走石子,左边的棋子向左走相当于右边的棋子走(堆中石子个数+距离),同样原创 2016-03-25 12:26:17 · 781 阅读 · 0 评论 -
POJ 1509 Glass Beads【字符串最小表示法】
题目链接:http://poj.org/problem?id=1509题意:求循环字符串的最小表示分析:浅析“最小表示法”思想在字符串循环同构问题中的应用代码:#include<cstdio>#include<iostream>#include<cstring>using namespace std;#define pr(x) cout << #x << ": " << x << " "原创 2016-05-08 23:47:07 · 786 阅读 · 0 评论 -
POJ 2104 K-th Number【整体二分 + 树状数组】
本来只是想学一下CDQ,还是先把整体二分搞懂一点。这题窝几个月前分别用划分树,树套树,主席树和挑战上介绍的分桶法实现了一发(然而现在都忘得差不多了) 最快的是划分树,其次是主席树,然后是树套树,还有一个10000+ms分桶法的思想实现的,最上面的就是整体二分的方法。题目链接:http://poj.org/problem?id=2104题意:给定序列,求每次询问区间的第K大数。分析:首先介绍整体原创 2016-04-29 01:09:02 · 7956 阅读 · 0 评论 -
POJ 2431 Expedition【贪心】
题意:卡车每走一个单元消耗一升汽油,中途有加油站,可以进行加油,问能否到达终点,求最少加油次数。分析:优先队列+贪心代码:#include<iostream>#include<queue>#include<algorithm>using namespace std;const int maxn = 10055;typedef pair<int, int>pii;pii p[maxn];原创 2016-02-07 23:21:44 · 411 阅读 · 0 评论 -
POJ 1741 Tree【树分治】
第一次接触树分治,看了论文又照挑战上抄的代码,也就理解到这个层次了。。 以后做题中再慢慢体会学习。题目链接:http://poj.org/problem?id=1741题意:给定树和树边的权重,求有多少对顶点之间的边的权重之和小于等于K。分析:树分治。 直接枚举不可,我们将树划分成若干子树。 那么两个顶点有两种情况:u,v属于同一子树的顶点对u,v属于不同子树的顶点对第一种情况,对子树递原创 2016-04-27 19:11:46 · 794 阅读 · 0 评论 -
POJ 1061 青蛙的约会【扩欧】
题意:两只青蛙在地球同一纬度不同位置x,yx,y向同一方向跳,每只青蛙跳的长度不同m,nm,n,纬线总长度l,问两只青蛙是否能相遇,跳几次才相遇。分析:可知,问题可转化为求(m−n)∗x≡(y−x)(modl)(m-n)*x ≡ (y-x) (mod l)的最小值解代码:#include<iostream>using namespace std;typedef long long ll;ll原创 2016-02-07 12:58:56 · 722 阅读 · 0 评论 -
POJ 3666 Making the Grade【DP】
读题堪忧啊,敲完了才发现理解错了。。理解题必须看样例啊!!题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110495#problem/S题意:给定序列,做出最少的改变,使得新的序列单调非增或者或单调非减。分析:先考虑单调非增。 如果后一个元素比前一个小,那么最少改变的情况就是让他和前一个元素相等。如果比前一个元素大或者相等,则原创 2016-04-07 16:29:13 · 392 阅读 · 0 评论 -
POJ 1015 Jury Compromise【DP】
罗大神说这题很简单,,,,然而我着实写的很难过。。。题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110495#problem/K题意:给定n个人对罪犯的d值和p值,从中选m个人使得d的和与p的和差的绝对值最小,如果有多种情况则输出d的和与p的和最大的,并升序输出选择的人的编号。分析:这题是既要考虑差又要考虑和。刚看见有点懵逼。原创 2016-04-07 15:33:32 · 531 阅读 · 0 评论 -
POJ 1470 Closest Common Ancestors【LCA Tarjan】
#题意:给定若干有向边,构成有根数,给定若干查询,求每个查询的结点的LCA。分析:还是很裸的tarjan的LCA。 这题我真的要吐槽!!调试了好久啊!!不是MLE就是RE。。。。查询数量没给,所以要用矩阵来存,这样还可以避免重复。给边的时候不知道会不会有重复的点,所以讲道理应该用vector保存。getchar。。。我不知道为什么会RE。。。其实ance数组可以不用的,只要每次处理子树的时原创 2016-03-24 23:09:10 · 374 阅读 · 0 评论 -
POJ 1330 Nearest Common Ancestors【LCA】
题目链接:http://poj.org/problem?id=1330题意:裸的LCA代码:倍增:#include<iostream>#include<cstring>using namespace std;const int maxn = 10005;const int maxm = 20;struct Edge{int to, next;};Edge edge[maxn * 2];原创 2016-03-24 22:49:04 · 411 阅读 · 0 评论 -
POJ 3281_Dining
题意:FJ准备了F种食物和D种饮料,每头牛都有喜欢的食物和饮料,并且每头牛都只能分配一种食物和饮料。问如何分配使得同时得到喜欢的食物和饮料的牛数量最多。分析:首先想到将牛与其对应的食物和饮料匹配起来,即在食物、饮料与牛之间连一条边,再在s和所有食物之间、t和所有饮料之间连一条边。这样每一条路径都对应着食物饮料和牛之间的匹配方案。那么如何避免一头牛被分配多组匹配呢?就将一头牛拆成两个结点,并用一条容量原创 2016-02-23 07:42:53 · 278 阅读 · 0 评论 -
POJ 3686_The Windy's
题意:N个工件要在M个工厂加工,一个工件必须在一个工厂做完,工厂一次只能处理一个工件。给定每个工件在每个工厂加工所需时间,求出每个工件加工结束的最小时间平均值。分析:工厂一次只能处理一个工件,那么其他要在这个工厂处理的工件就要排队等待,如果有aa个工件要在该厂处理,花的时间分别为n1,n1+n2,...,n1+n2+n3..nan_1,n_1 + n_2,...,n_1+n_2+n_3..n_a,该原创 2016-03-04 21:20:56 · 374 阅读 · 0 评论 -
POJ 3468_A Simple Problem with Integers(树状数组)
完全不知道该怎么用,看书稍微懂了点。题意:给定序列及操作,求区间和。分析:树状数组可以高效的求出连续一段元素之和或更新单个元素的值。但是无法高效的给某一个区间的所有元素同时加个值。 不能直接用树状数组求,就处理一下。用两个树状数组维护两个数据,一个维护前ii项和,一个维护增加的值。设:∑j=1iaj=sum(bit1,i)∗i+sum(bit0,i)\sum_{j=1}^i a_j=sum(bit原创 2016-02-13 12:21:19 · 538 阅读 · 0 评论 -
POJ 3468_A Simple Problem with Integers(线段树)
题意:给定序列及操作,求区间和。分析:线段树,每个节点维护两个数据:该区间每个元素所加的值该区间元素和代码:#include<cstdio>#include<iostream>#include<cmath>using namespace std;typedef long long ll;//[l,r)const int maxn = 300005;ll sum[maxn], ad原创 2016-02-13 11:13:32 · 364 阅读 · 0 评论 -
POJ 3169_Layout
大早上水一发=。=题意:n头牛按编号顺序站成一列,给定那头牛之间的位置关系,求出第n头牛和第一头牛之间的最大距离。分析:差分约束系统,这题不等式关系还是挺好找的。代码:#include<cstdio>#include<iostream>using namespace std;struct edge{int u, v, w; };const int maxn = 1005, maxm = 25原创 2016-02-12 08:42:34 · 254 阅读 · 0 评论 -
POJ 3684_Physics Experiment
题意:若干球最初从高到低排列,依次落下。 球与地面碰撞,速度不变方向相反,球之间碰撞, 交换速度和方向。问某一时刻各个球的高度。分析:把球之间的碰撞看成是擦肩而过,但是由于半径的存在,最后每个球的高度都要加上2∗i∗r2*i*r,还有注意半径的单位是cmcm代码:#include<cstdio>#include<cmath>#include<algorithm>using namespace原创 2016-02-11 12:53:15 · 435 阅读 · 0 评论 -
POJ 3255_Roadblocks
题意:无向图,求单源次短路,每条边可以走多次。分析:对于每个点记录最短路和次短路,在更新每个点的最短路时,相应更新次短路,如果最短路更新了,就令次短路等于原来的最短路,如果没有,就看能否直接更新次短路。代码:#include<iostream>#include<queue>#include<cstdio>using namespace std;#define se second#defin原创 2016-02-11 12:14:56 · 315 阅读 · 0 评论 -
POJ 2785_4 Values whose Sum is 0
题意:A,B,C,D四组数中各取一个数,使这四个数相加为0,问有多少组取法?分析:四个数列有n4n^4种取法,规模较大,但是可以将他们分成AB,CD两组,分别枚举,最后再合并。代码:#include<cstdio>#include<algorithm>#include<iostream>using namespace std;typedef long long ll;const int m原创 2016-02-10 10:24:23 · 323 阅读 · 0 评论 -
POJ 3320_Jessica's Reading Problem
题意:每页书都对应一个知识点,问最少看连续的多少页,才能把所有知识点都看完?分析:《挑战程序设计竞赛》介绍的尺取法,反复推进区间的开头和结尾,来求取满足条件的最小区间,先确定好一个满足条件的区间,然后不断往后移,找满足条件的区间。代码:#include<iostream>#include<vector>#include<cstring>#include<map>#include<cstdio原创 2016-02-09 13:45:22 · 329 阅读 · 0 评论 -
POJ 2456_Aggressive cows
题意:给定N个位置,把C头牛分别放入,求相邻两头牛的最大距离。分析:即为求两头牛之间最小距离的最大值。二分搜索答案。代码:#include<iostream>#include<algorithm>#include<cstdio>using namespace std;const int maxn = 100005, INF =0x3fffffff;typedef long long ll;原创 2016-02-09 09:10:01 · 281 阅读 · 0 评论 -
POJ 1064_Cable master
题意:给定一系列长度的电缆,将他们切成K条相等长度的电缆,问每条最长有多长?分析:对长度进行二分,判断能否满足K条。二分搜索: 在求解最大化或最小化问题中,能够比较简单的判断条件是否满足,那么使用二分搜索法可以很好地解决问题。结束判定: 正常处理整数时,对于[l,r)[l,r)结束范围即为l=rl=r,但是小数的处理就涉及精度的要求了。 在输出小数时,需要设置合理的结束条件满足精度的要求原创 2016-02-08 21:33:30 · 314 阅读 · 0 评论 -
POJ 2240_Arbitrage
题意:给定一系列货币汇率,求能否从一种货币,经过一系列转换,最终转化回更高价值的该种货币。分析:即为求最长路并判断是否存在“正”权值回路,这里用的bellmanford算法。代码:#include<iostream>#include<cstring>#include<map>using namespace std;const int maxn = 50, maxm =1005;int n,原创 2016-02-08 01:10:29 · 297 阅读 · 0 评论 -
POJ 1182_食物链
题意:三种动物A,B,C,A吃B,B吃C,C吃A, 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是”1 X Y”,表示X和Y是同类。 第二种说法是”2 X Y”,表示X吃Y。 此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。 1) 当前的话与前面的某些真的话冲突原创 2016-02-08 00:53:15 · 386 阅读 · 0 评论 -
静态区间第k大(划分树)
划分树:思想:利用快速排序思想,建树时将区间内的值与区间中值相比,小于则放入左子树,大于则放入右子树,如果相等则放入左子树直到放满区间一半。查询时,在建树过程中利用leftsum[p][i]leftsum[p][i]数组保存有多少个数划分到第pp层,第ii个位置的左边。每次查询计算出每个区间有多少数被放入左子树,小于等于kk则说明所求数在左子树,继续查询其左子树,反之则查询右子树。l==rl==原创 2016-02-13 22:34:02 · 856 阅读 · 2 评论