
POJ
ramay7
Life is not short,but float.
展开
-
HDU 2586 How far away?(LCA)
题目链接; HDU 2586 How far away? 题意: 和POJ 1986 Distance Queries一样的,包括数据范围。 分析: 这里建单向边就能过了。。。#include <stdio.h>#include <string.h>#include <algorithm>#include <math.h>using namespace std;typede原创 2016-08-13 14:12:46 · 398 阅读 · 0 评论 -
POJ 2082 Terrible Sets(单调栈)
题目链接: POJ 2082 Terrible Sets 题意: 【题目描述成这样也是醉了。。。】 实际上就是给出nn个并排矩形的底和高,求能划分的最大矩形面积。 数据范围:n≤5∗104n\leq 5*10^4 分析; 和前面那道题其实一样的,只要用一个sum[]sum[]数组记录下底的和就好了。#include <stdio.h>#include <string.h>#incl原创 2016-07-25 23:46:20 · 398 阅读 · 0 评论 -
POJ 1651 Multiplication Puzzle(区间dp)
题目链接: POJ 1651 Multiplication Puzzle 题意: 给出nn个数,每次可以选择从中取走一个数,取走的代价是它左右以及自身三个数的乘积,不允许取走首末两个数字,求将中间n−2n-2个数字都取走的最小代价和? 数据范围:n≤100,每个数字∈[1,100]n\leq 100,每个数字\in [1,100] 分析; 比较简单的区间dp. 用dp[i][j]dp[原创 2016-07-24 23:12:02 · 363 阅读 · 0 评论 -
POJ 3243 Clever Y(扩展BSGS,gcd(a,p)!=1)
题目链接: POJ 3243 Clever Y 题意: 跟[POJ 2417 Discrete Logging]类似,只不过gcd(a,p)!=1gcd(a,p)!=1. 分析; 初始化cnt=0cnt = 0(消因子轮数),d=1 d = 1(消掉的gcdgcd乘积). 令tmp=gcd(a,p)tmp = gcd(a, p) 当tmp!=1tmp != 1时,修改变量值:b/=tmp原创 2016-07-13 20:51:40 · 945 阅读 · 2 评论 -
POJ 2417 Discrete Logging(BSGS算法,gcd(a,p)=1)
题目链接: POJ 2417 Discrete Logging 题意: 求ax≡b(modp)a^x ≡ b(mod p)的最小xx。(pp为素数,2≤a<p,1≤b<p2\leq a<p, 1\leq b<p) 分析: BSGS算法。BSGS算法。 一开始用mapmap一直TT,参(zhao)考(ban)了这里 用了hashhash才过。。。BSGSBSGS算法用于求解:ax=b(m原创 2016-07-13 20:36:54 · 785 阅读 · 0 评论 -
POJ 1981 Circle and Points(求半径R圆覆盖最多点数及由圆上两点和半径求圆心)
题目: POJ 1981 Circle and Points HDU 1077 Catching Fish 题意: 给出n个点的二维点坐标,问单位圆最多能覆盖多少点? 分析: ①: 最优的情况一定是有两个点在圆弧上。先枚举两个点,计算两点在圆弧上的单位圆(一般会有两个) 但是可以统一取一个方向的(也就是AB取一个然后BA取另外一个).然后枚举所有点,计算在这个单位圆内的点的个数。原创 2016-04-13 23:01:35 · 3060 阅读 · 0 评论 -
POJ 3734 Blocks(dp、矩阵快速幂)
题目链接: POJ 3734 Blocks 题意: 有n个格子,每个格子可以涂red,blue,green,yellowred,blue,green,yellow四种颜色之一,但是需要保证所有的red和green格子数均为偶数,问一共有多少种涂色方案? 如:n=2时:RR,GG,BY,YB,BB,YY,共6种。数据范围1<=n<=(1e9)n=2时:RR,GG,BY,YB,BB,YY,共6种原创 2016-04-04 15:47:47 · 639 阅读 · 0 评论 -
POJ 2955 Brackets(区间dp)
题目链接: POJ 2955 Brackets 题意: 给出一个长度不超过100的只含"(",")","[","]""(",")","[","]"的字符串,求字符串中最大的匹配括号数。 (),[],(()),()[],()[()](), [], (()), ()[], ()[()]都可以认为是匹配的。 样例: ((())) ()()() ([]]) )[)( ([][][)6原创 2016-07-24 08:34:27 · 442 阅读 · 0 评论 -
POJ 1080 Human Gene Functions(字符串匹配得分,dp)
题目链接; POJ 1080 Human Gene Functions 题意: 给出两个长度不超过100100,且只含字母A,G,C,TA,G,C,T的字符串,需要将两个字符串匹配得分,每个字母可以和空格对应,得分规则如下: 求最大得分。 分析: 这道题和之前做过的UVAL ive 6697 Homework Evaluation很类(yi)似(yang)。 dp[i][j][0原创 2016-07-23 16:42:15 · 528 阅读 · 0 评论 -
POJ 3301 Texas Trip(最小正方形覆盖、点坐标旋转)
题目链接: POJ 3301 Texas Trip 题意: 平面给nn个整数点,求覆盖这nn个整数点的最小正方形面积? 数据范围:n≤30,每个点距离原点的距离不超过500n\leq 30,每个点距离原点的距离不超过500 分析: 先考虑如果水平竖直地放置正方形(边和坐标轴平行)圈住所有点的最小正方形的边长是: L=max(xmax−xmin,ymax−ymin)L=max(x_{m原创 2016-07-22 11:57:48 · 1532 阅读 · 0 评论 -
POJ 2773 Happy 2006(求第k个和m互素的数/欧拉函数)
题目链接: POJ 2773 Happy 2006 题意: 求第kk个和mm互素的数。m<=106,k<=108m<=10^6,k<=10^8 分析:如果gcd(a,m)=1gcd(a,m)=1,那么gcd(a+k∗m,m)=1,k∈Zgcd(a+k*m,m)=1,k\in Z证明:只需要证明gcd(a+m,m)=1gcd(a+m, m)=1.令d=gcd(a+m,m)d=gcd(a+m原创 2016-06-06 21:39:46 · 596 阅读 · 0 评论 -
POJ 2154 Color(Polya原理+欧拉函数)
题目链接: POJ 2154 Color 题意: nn个颜色涂nn个珠子的项链,考虑旋转,求本质不同的项链数?, 分析: 根据PolyaPolya原理可得Ans=∑i=1nngcd(n,i)=∑d=1d=nnd∑i=1i=n[gcd(n,i)==d]=∑d=1nnd∑i=1n[gcd(nd,id)==1]=∑d=1nnd∗ϕ(nd) Ans原创 2016-06-09 21:37:34 · 564 阅读 · 0 评论 -
POJ 1286 Necklace of Beads(Polya原理)
题目链接: POJ 1286 Necklace of Beads 题意: 有3种颜色来涂n颗珠子的项链,考虑翻转和旋转,问不同的项链个数?有3种颜色来涂n颗珠子的项链,考虑翻转和旋转,问不同的项链个数? 分析: 假设有tt种颜色,nn颗珠子。旋转如果逆时针旋转ii颗珠子的间距,则珠子0,i,2i,...0,i,2i,...构成一个循环,这个循环有i∗ngcd(i,n\frac{i*n}原创 2016-06-08 23:40:37 · 495 阅读 · 0 评论 -
POJ 3164 Command Network(最小树形图)
题目链接: POJ 3164 Command Network 题意: 给出n个点[下标从1–n]的坐标和m条单向边[i,j]表示可以从i点建一条边到j,权值是两点距离, 求将这n个点连通的最小边权和。如果无法连通输出”poor snoopy”,否则输出最小边权和。#include <iostream>#include <cstdio>#include <cstring>#include原创 2016-05-19 23:10:10 · 579 阅读 · 0 评论 -
POJ 3061 Subsequence(尺取法)
题目链接: POJ 3061 Subsequence 题意: 给定长度为n的数列整数a[0],a[1]...a[n−1]a[0],a[1]...a[n-1],以及整数s,求出总和不小于s的连续子序列的长度的最小值。 如果解不存在输出0.#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#原创 2016-04-24 13:09:28 · 424 阅读 · 0 评论 -
POJ 3320 Jessica's Reading Problem(尺取法)
题目链接: POJ 3320 Jessica’s Reading Problem题意: 一本P页的书,第i页恰好有一个知识点a[i](每个知识点都有一个编号)。全书中同一个知识点可能会被多次提到,需要连续阅读一些连续的页将所有知识点都覆盖到。给定每页写的知识点,求出最少要阅读的页数。//2056K 485MS #include <iostream>#include <cstdio>#inc原创 2016-04-24 13:07:26 · 535 阅读 · 0 评论 -
POJ 2689 Prime Distance(区间相邻素数最大、小距离,区间素数筛)
题目链接: POJ 2689 Prime Distance 题意: 求出区间[a, b]内相邻素数的最大距离和最小距离。 分析: 区间素数筛。然后枚举所有区间素数。#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <climits>原创 2016-05-31 01:26:45 · 920 阅读 · 0 评论 -
POJ 3494 Largest Submatrix of All 1's(最大全1子矩阵面积、单调栈)
题目链接: POJ 3494 Largest Submatrix of All 1’s 题意: 给出一个n∗mn*m的01矩阵,求出最大全1子矩阵面积。 数据范围:n,m≤2000n,m\leq 2000 分析: 我们把每一行单独处理,把从这行向上连续延伸全为1的最大长度看成是矩形的高,那么每行其实就是求个最大矩形面积。 height[i][j]:第i行第j列元素往上最长的连续1长度h原创 2016-07-25 23:53:31 · 1733 阅读 · 4 评论 -
POJ 2888 Magic Bracelet(Polya计数+dp+矩阵快速幂+欧拉函数+乘法逆元)
题目链接: POJ 2888 Magic Bracelet 题意: 有一串nn个珠子的项链,用mm种颜色来染,有kk个限制条件:a[i]和b[i]a[i]和b[i]不能相邻。问本质不同的项链有多少种?(考虑旋转,答案对99739973取模,且gcd(n,9973)=1gcd(n,9973)=1)。数据范围:n≤109,1≤m≤10,0≤k≤m∗(m−1)2n \leq 10^9,1\leq原创 2016-07-10 19:49:03 · 912 阅读 · 0 评论 -
POJ 1091 跳蚤(容斥原理)
题目链接: POJ 1091 跳蚤 题意: Z城市居住着很多只跳蚤。在Z城市周六生活频道有一个娱乐节目。一只跳蚤将被请上一个高空钢丝的正中央。钢丝很长,可以看作是无限长。节目主持人会给该跳蚤发一张卡片。卡片上写有N+1个自然数。其中最后一个是M,而前N个数都不超过M,卡片上允许有相同的数字。跳蚤每次可以从卡片上任意选择一个自然数S,然后向左,或向右跳S个单位长度。而他最终的任务是跳到距离他左原创 2016-07-17 00:03:52 · 785 阅读 · 0 评论 -
POJ 1986 Distance Queries(查询两点距离,LCA)
题目链接: POJ 1986 Distance Queries 题意: 给一个连通的nn个节点的树,有QQ次查询,每次输出两点间距离。 数据范围:n≤40000n\leq 40000 分析: 先用基于RMQ算法的求LCA的方法求出LCA。记dis[i]dis[i]为根节点到ii节点的距离,那么uu和vv之间的距离就是: Ans=dis[u]+dis[v]−2∗dis[LCA(原创 2016-08-13 13:35:01 · 774 阅读 · 0 评论 -
POJ 1470 Cloest Common Ancestor(用Tarjan查询LCA)
题目链接; POJ 1470 Cloest Common Ancestor 题意: 给一个nn个节点,n−1n-1条边的树,有多组查询两个节点的最近公共最先,按编号从小到大输出至少作为一次查询的最近公共祖先的节点编号和相应的次数。 数据范围:n≤900n\leq 900 分析: TarjanTarjan离线处理。当然使用基于RMQRMQ的在线处理方式也应该可以 。 算法原创 2016-08-13 11:07:58 · 455 阅读 · 0 评论 -
POJ 1330 Nearest Common Ancestors(LCA,在线处理三种方式)
题目链接: POJ 1330 Nearest Common Ancestors 题意: 给一个nn点和n−1n-1条边的树,第nn行是要查询的两个节点的最近公共祖先,输出要查询的最近公共祖先。 数据范围:n≤104n\leq 10^{4} 分析: 可以学习《挑战程序设计竞赛》P328−P331P_{328}-P_{331}暴力求解记节点vv到根的深度为depth[v]depth[原创 2016-08-13 00:33:48 · 460 阅读 · 0 评论 -
POJ 1655 Balancing Act(简单树型dp)
题目链接: POJ 1655 Balancing Act 题意: 给一个nn个结点和n−1n-1条无向边的树,定义树中每个结点的平衡值是删掉这个结点形成若干子树的所有子树结点数量最大值。 求所有结点中平衡值的最小值。 数据范围:n≤2∗104n\leq 2*10^{4} 分析: 比较简单的树型dp。 对每个节点记录以它为根的子树的结点数量,dfsdfs更新即可,再判断下父亲结点之上的原创 2016-08-12 00:17:57 · 423 阅读 · 0 评论 -
POJ 2282 The Counting Problem & POJ 3286 How many 0's?(按位计算贡献)
题目链接POJ 2282 The Counting Problem题意统计区间L和R之间,0-9每个数字出现的次数。例如对于19和21之间,数字为19,20,21,其中0和9都出现了1次,1和2都出现了两次,其余数字都没有出现,也就是0次。 数据范围:1<L,R<1091<L,R<10^{9}分析题目中没有说明L,RL,R的大小关系,所以读入时需要判断下。 我是按位考虑的,计算每一位上每个数字出原创 2016-09-02 17:41:16 · 464 阅读 · 0 评论 -
POJ 3252 Round Numbers(数位dp,区间中二进制表示时0的个数大于等于1的个数的数字的个数)
题目链接: POJ 3252 Round Numbers 题意: 给一个区间[a,b][a,b]求区间中二进制表示时0的个数大于等于1的个数的数字的个数。 数据范围:a≤b≤2∗109a\leq b\leq 2*10^{9} 分析: 数位dp。 做区间减法后,将区间上限表示成二进制形式,dfs处理。记录下当前已有0和1的个数即可。注意剪枝。#include <stdio.h>#inc原创 2016-08-31 00:26:00 · 697 阅读 · 0 评论 -
POJ 2152 Fire(依赖型树形dp)
题目链接: POJ 2152 Fire 题意: 给一个nn个节点和n−1n-1条边的树,边权代表距离,要在这些点中选择一些点建立消防站,使得每个点都会被消防站覆盖到。每个点有两个属性:cost[i]cost[i]表示在这个点建立消防站的代价,limit[i]limit[i]表示当某个消防站离ii的距离不超过limit[i]limit[i]时,这个点就可以认为被该消防站覆盖,求使得nn个点都被原创 2016-08-06 14:33:38 · 528 阅读 · 0 评论 -
POJ 1067 取石子游戏(威佐夫博弈)
题目链接: POJ 1067 取石子游戏 题意: 有两堆石子各有a,ba,b个,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。判断先手是胜者还是负者。 数据范围;a,b≤109a,b\leq 10^9 分析; 威佐夫博弈(Wythoff Game)。 我们用 (ak,bk),ak≤bk,k=0,1,2,…,n(a_k,b_k),a_k\l原创 2016-07-21 23:08:52 · 648 阅读 · 0 评论 -
POJ 2533 Longest Ordered Subsequence(最长上升子序列长度、O(nlogn))
题目链接: POJ 2533 Longest Ordered Subsequence 题意; 求最长上升子序列长度。 数据范围:n≤1000n\leq 1000 分析: 直接用O(nlog(n))O(nlog(n))的方法,在数组中二分查找并替换,使得最长上升子序列的“潜力”更大。#include <iostream>#include <cstdio>#include <cstrin原创 2016-07-20 23:30:14 · 486 阅读 · 0 评论 -
POJ 2342 Anniversary party(树形dp)
题目链接: POJ 2342 Anniversary party 题意: 有nn个人要去参加聚会,每个人都不想和他的直接上属出现,给出每个人的从属关系,每个人会有convivialityconviviality,求聚会的人的convivialityconviviality和最大是多大? 数据范围:n≤6000n\leq 6000 分析: 其实每个人就两种状态dp[i][0]dp[i][原创 2016-07-30 17:45:42 · 500 阅读 · 0 评论 -
POJ 1985 Cow Marathon & HDU 2196 Computer(树的直径)
题目链接; POJ 1985 Cow Marathon HDU 2196 Computer 题意: 两道题其实都是求树的直径。 分析: 树的直径:树中所有最短路径的最大值。 定理:在一个连通的无项无环图中,以任意结点出发所能到达的最远结点,一定是该图直径的端点之一。证明:假设直径是δ(s,e)\delta (s,e),任意结点为xx,其最远能到达的结点为yy。分两种情况: ①如果原创 2016-07-30 17:35:38 · 802 阅读 · 0 评论 -
POJ 2796 Feel Good(单调栈)
题目链接: POJ 2796 Feel Good 题意: 一个区间的权值是区间元素之和乘以区间最小的元素值。给一个长度为nn的数组,求最大子区间权值。 数据范围:n≤106,data[i]∈[0,106]n\leq 10^6,data[i]\in [0,10^6] 分析: 考虑到每个数非负,只需要利用单调栈处理出每个数向左向右是最小值的最大区间就好了。#include <stdio.h>原创 2016-07-29 12:20:42 · 431 阅读 · 0 评论 -
POJ 1094 Sorting It All Out(拓扑排序)
题目链接; POJ 1094 Sorting It All Out 题意: 给出nn,代表nn个元素,和mm条关系,问在哪条关系时可以确定顺序或者出现冲突或者不能确定顺序。 数据范围:2≤n≤26 2 \leq n \leq 26 分析; 主要是不能确定顺序的判断。 当队列中多余一个元素时是不能确定顺序的,但是这时有可能是冲突的。所以要还要判断是否冲突。 对于每条新加关系,进行一遍原创 2016-07-18 22:25:18 · 403 阅读 · 0 评论 -
POJ 2585 Window Pains(建立优先关系、拓扑排序)
题目链接; POJ 2585 Window Pains 题意: 给一个4∗44*4的方格表示屏幕,1−−91--9每个数字可以用2∗22*2的方格出现在屏幕上的特定位置,让你判断这个屏幕是否合法。 分析: 这题难点在于建立相对顺序。 首先我们可以把每个位置可以出现的数字预处理出来。 然后判断每个位置出现的数字,比如说在(2,2)(2,2)位置可以出现:1,2,4,51,2,4,5。如果原创 2016-07-18 21:43:43 · 709 阅读 · 0 评论 -
POJ 1270 Following Orders(dfs/next_permutation())
题目链接; POJ 1270 Following Orders 题意: 给出nn个不同的小写字母和若干约数关系,表示某些字母不能排在某些字母前面。按字典序输出所有可能的排列。 数据范围:2≤n≤202\leq n \leq 20,必定存在可能的排列,并且排列个数≤300\leq 300。 分析: 有两种思路。 用link[i][j]link[i][j]表示编号为ii的字母不能排在编号为原创 2016-07-18 21:29:32 · 495 阅读 · 0 评论 -
POJ 2823 Sliding Windows(单调队列)
题目链接: [POJ 2823 Sliding Windows](http://poj.org/problem?id=2823 题意: 有nn个数,可以用一个长度为kk的矩形框住连续的kk个数,要求依次输出矩形在这n−k+1n-k+1个位置的每个区间的最大值和最小值。 数据范围:n≤106n\leq 10^6 单调队列: 单调栈主要用于解决元素对所影响的区间长度,而单调队列主要用于解决给原创 2016-07-28 00:23:00 · 441 阅读 · 0 评论 -
POJ 2115 C Looooops(扩展欧几里德)
题目链接: POJ 2115 C Looooops 题意: 有一个循环语句,变量从A开始,每次都要+C,终止条件是变量==B,每次累加都要mod 2^k.问循环最多执行几次?或者永远循环, 分析: 令K = 2^k.设循环执行了x次则:(A + C * x) mod K = B,也就是A + C * x = B + K * y. 移项可得:C * x - K * y = B - A.那么原创 2016-05-31 01:22:42 · 511 阅读 · 0 评论 -
POJ 3090 Visible Lattice Points(欧拉函数)
题目链接: POJ 3090 Visible Lattice Points 题意: 给你一个方格,问从最左下角最多能看到多少点? 分析: 其实还是欧拉函数~#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <climits>#in原创 2016-05-31 01:20:29 · 515 阅读 · 0 评论 -
POJ 2063 Investment(完全背包)
题目链接: POJ 2063 Investment 题意: 有m元本金,想要在银行存year年,有n种可供选择的存款方式,每种存款方式都有相应的本金val[i]和年获利interst[i], 每年的获利又可以作为下一年的本金继续存储。数据范围:m<=1e6,year<=40,n<=10,val[i]是1000的倍数,年获利不超过百分之10. 分析: 完全背包。 因为val[i]是100原创 2016-04-13 15:39:54 · 506 阅读 · 0 评论 -
POJ 2184 Cow Exhibition(变形01背包)
题目链接: POJ 2184 Cow Exhibition 题意: 给n头牛,每头牛有两个属性:smart和fun,选出若干头牛使得这些牛的smart和fun之和最大,并且smart和与fun和均不为负。 每头牛的smart和fun可以为负。 分析: 01背包和滚动数组。 用dp[j]表示得到smart和为j时的fun和最大值。但是因为j可能为负,一开始我是用map,但是一直TLE。。原创 2016-04-13 14:45:01 · 405 阅读 · 0 评论