![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM
文章平均质量分 74
别忘了最初的自己
天秤座 乐观 低调 执着
展开
-
POJ 2492 A Bug's Life (并查集)
题意:Professor Hopper专门研究bug的生活习性,他表示若两只bugs的生活习性差别很大,则说明他们可能为不同的性别,但如果出现三只bugs的习性两两差别很大,则有可能出现同性恋的bug了。现在有n只bugs,和生活习性差别很大的m对bugs的编号,问这些bugs中,有没有可能出现同性恋者。分析:并查集//140K 719MS#include #define N原创 2013-08-29 04:33:04 · 486 阅读 · 0 评论 -
POJ 2001 Shortest Prefixes ( 字典树 )
题意:给出n个单词(1分析:字典树的基础应用。Trie树(字典树),又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。它有3个基本特性:1)根节点不包含字符,除根节点外每一个节点都只包含原创 2013-10-04 22:36:16 · 602 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers (线段树—成段覆盖)
题意:给出[1,n]区间内每个点的数值,让你执行下面的操作: 1. C a b w : 区间[a,b]上所有点的数值加上w。 2. Q a b : 输出区间[a,b]上所有点的数值之和。思路:经典线段树。静态建树,成段修改,区间求和。用普通的线段树去做肯定超时,因为成段修改的时候会是o(n)。关键在于用add记录对应区间内所有元素的增量,并对查询函数进行相应的修原创 2013-08-28 00:09:07 · 478 阅读 · 0 评论 -
POJ 3264 Balanced Lineup
题意:给出初始化的区间值,m次查询。每次查询区间[a,b]的最大值-最小值分析:线段树 更新: 无更新 查询:区间查询, 建立线段树的时候,每个结点存储左右子树的最大值和最小值, 查询时直接访问区间最大值和最小值,不需要查找到最低,查询时间复杂度O(logN)//2384K 1594MS#include #include #include #原创 2013-09-21 00:02:01 · 395 阅读 · 0 评论 -
POJ 1465 Multiple (广搜,哈希判重)
题意:给定一个数n,以及几个数字,求仅包含给定数字的n的最小倍数.分析:宽搜+hash判重,但在搜索过程中有可能出现大数,具体怎么处理的,祥看我的代码。//428K 672MS#include#include#include#include#include#include#include#include#include#include#define N原创 2013-10-05 20:22:05 · 599 阅读 · 0 评论 -
POJ 1141 Brackets Sequence ( 区间DP )
题意:给一组小括号与中括号的序列,添加最少的字符,使该序列变为合法序列,输出该合法序列。 分析:设dp[i,j]为从位置i到位置j需要加入字符的最小次数,有dp[i,j]=min(dp[i,k]+dp[k+1,j]),其中i。特别的当s[i]='[' s[j]=']'或者s[i]='(' s[j]=')'时,dp[i,j]=dp[i+1,j-1]。初始条件为dp[i,i]=1,其中原创 2013-10-07 21:04:09 · 504 阅读 · 0 评论 -
POJ 1703 Find them, Catch them
题意 :有两个不同的帮派,每个帮派至少有一个人。 判断两个人是否属于同一个帮派。有 T 组测试数据,给你 N 个人,编号从 1 到 N,操作 M 次。每次操作输入一个字符和两个数 x ,y ,如果字符为 A 则判断 x 和 y 是否属于同一个帮派,并且输出结果。 如果字符为 D 则明确告诉你 x 和 y 是属于不同帮派的。分析:并查集,以前接触的并查集都是让我们判断是否属于同一个连通分量,原创 2013-10-07 17:10:51 · 445 阅读 · 0 评论 -
POJ 3414 Pots ( BFS , 打印路径 )
题意:给你两个空瓶子,只有三种操作一、把一个瓶子灌满二、把一个瓶子清空三、把一个瓶子里面的水灌到另一个瓶子里面去(倒满之后要是还存在水那就依然在那个瓶子里面,或者被灌的瓶子有可能没满)思路:BFS,打印路径时需技巧。//G++ 840K 0MS#include #include #include #include #include #原创 2013-10-08 23:18:37 · 701 阅读 · 0 评论 -
POJ 1011 Sticks ( 深搜、剪枝)
经典搜索题,黑书上的剪枝例题。剪枝的空间很大,剪枝前写下朴素的搜索框架(黑字部分),枚举原始木棍的长度及由那些小木棍组合。原始木棍长度一定是小木棍总长度的约数,因此可以减少枚举量。 越长的木棍对后面木棍的约束力越大,因此要把小木棍排序,按木棍长度从大到小搜索,这样就能在尽可能靠近根的地方剪枝。(剪枝一) 如果当前木棍能恰好填满一根原始木棍,但因剩余的木棍无法组合出合法解原创 2013-09-24 01:19:22 · 700 阅读 · 0 评论 -
POJ 1118 Lining Up
题意:给出n个点的整数坐标(n思路:简单几何题。采用几何中三个点是否在一条直线判定定理。//180K 500MS#include #include #include #define N 705using namespace std ;struct node{ int x , y ;}node[N];void Solve原创 2013-09-24 23:43:12 · 495 阅读 · 0 评论 -
POJ 1157 LITTLE SHOP OF FLOWERS ( DP )
题意:输入两个整数 F 和 V,分别表示花的数量和花瓶的数量,接下来输入F行V列的表格如下;value[i][j]表示花i放在瓶j里面的价值;规定把F束花放在V个花瓶里,使花的相对顺序不能变,即1在2前面,2在3前面......。 求怎样放能使价值总和最大,输出最大值。思路:dp[i][j] 表示 表示前i束花放在前j个花瓶中审美的最大值状态转换方程: dp[i][j原创 2013-10-24 15:46:12 · 440 阅读 · 0 评论 -
POJ 3273 Monthly Expense(二分)
题意:给出农夫在n天中每天的花费,要求把这n天分作m组,每组的天数必然是连续的,要求分得各组的花费之和应该尽可能地小,最后输出各组花费之和中的最大值分析:二分搜索的经典题目。。。#include #include #include #define N 100050using namespace std ;int n , m ; //n 代表天数,m代表要分成的区间原创 2013-10-19 20:53:57 · 602 阅读 · 0 评论 -
POJ 3461 Oulipo ( KMP )
题意:给你一个子串(模式串)和一个母串(文本),问子串在母串中出现的次数。分析:基础的KMP#include #include #include #include #define SUB_MAX 10005#define STR_MAX 1000005char str[STR_MAX] ;char sub[SUB_MAX] ;int next[SUB_MAX]原创 2013-10-28 20:31:32 · 405 阅读 · 0 评论 -
POJ 3049 Invitation Cards ( 快排+深搜)
题意:在一堆字母中找一段字母,使其中至少含有1个原音,2个辅音字母,且按字典序从小到大排列思路:字母也就是char 类型(小整形),将字符传按一定规则排序,ch - 'a' , (ch 为char类型),即 ‘a' 对应 0 , 'b' 对应1...'z' 对应25...再对字符对应的数字(0...25)排序,然后进行深搜。#include #define N 30char str[N原创 2014-01-27 00:32:25 · 548 阅读 · 0 评论 -
POJ 1185 炮兵阵地 ( dp[状态压缩] )
题意是汉语.解析:可以发现,对于每一行放大炮的状态,只与它上面一行和上上一行的状态有关,每一行用状态压缩的表示方法,0表示不放大炮,1表示放大炮,同样的,先要满足硬件条件,即有的地方不能放大炮,然后就是每一行中不能有两个1的距离小于2(保证横着不互相攻击),这些要预先处理一下。然后就是状态表示和转移的问题了,因为是和前两行的状态有关,所以要开个三维的数组来表示状态,当前行的状态可由前两行的状态原创 2014-01-28 18:09:22 · 440 阅读 · 0 评论 -
刘汝佳黑书 pku等oj题目
一.动态规划参考资料:刘汝佳《算法艺术与信息学竞赛》《算法导论》 推荐题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1141简单 http://acm.pku.edu.cn/JudgeOnline/problem?id=2288中等,经典TSP问题 http://acm.pku.edu.cn/Judg转载 2014-02-07 01:24:27 · 912 阅读 · 0 评论 -
POJ 3006 Dirichlet's Theorem on Arithmetic Progressions ( 素数、筛选)
1.题意:求一个等差数列的第K个素数分析:将所求范围100W中的素数全部筛选出,然后直接求解即可。注意:在用到0,1这种判断时,bool prime[] 比 int prime[]不仅更节省内存,而且更有效率。。#include #define MAX 1000000#define bool char#define true 1#原创 2013-08-30 01:19:59 · 775 阅读 · 0 评论 -
POJ 1384 Piggy-Bank
题意:题目的意思是有一个储蓄罐,里面放了硬币,只知道储蓄罐装了硬币和没装硬币时的重量,并且知道每种面值硬币的重量。现在要求储蓄罐中可能的最小金额。若储蓄罐中硬币的重量和每种面值硬币的重量不能匹配,则输出impossible。分析:典型的完全背包,注意初始化。。//216K 79MS#include #include #include #define MIN(A,原创 2013-10-02 01:17:16 · 452 阅读 · 0 评论 -
POJ 1047 Round and Round We Go
题意:判断循环数,因为数据较大,需要用到大数乘法分析:大叔乘法不难,关键是在判断时怎么对每种数的个数统计,如果用Int数组存,再比较,太费事。。。祥看我的代码。。 ps,这题discuss说有循环数的规律。。有时间再写下。。 //164K 16MS#include #include #include #include #define N 80using n原创 2013-10-02 01:06:24 · 844 阅读 · 0 评论 -
POJ 1276 Cash Machine (多重背包)
题意:我现在要从ATM中取钱,(ATM机中能取出的钱数最多为M)ATM里面有若干种货币,每一种都有对应的货币面额和张数。问现在ATM能够取出来的 小于等于M的最大金额。分析:若将M理解为背包体积(V ),而每种货币的面额理解成 value,货币的面额同样理解成cost,那么这个问题就是一个多重背包问题。#include #include #define MAX_CASH原创 2013-08-23 16:13:07 · 505 阅读 · 0 评论 -
POJ 2255 Tree Recovery ( 二叉树)
题意:给出一棵二叉树的前序遍历和中序遍历,输出这棵树的后序遍历。分析:根据前序和中序遍历建树,再后续输出即可,重点在于建树的过程。//116K 0MS#include #include #include #define MAX 30typedef struct node{ char c ; node *left , *right ;}*tr原创 2013-08-29 04:51:47 · 520 阅读 · 0 评论 -
POJ 1014 Dividing ( 多重背包)
题意:玛莎和比尔有一批大理石(或弹珠)。他们想要将这批大理石分成价值和相等的两批。如果所有的大理石有同样的价值,那很简单,因为只要按数目分一半就行了。但是很可惜,一些大理石大一点,或者更漂亮一点。所以玛莎和比尔对每一个大理石分配一定的价值分从1到6。现在他们要分离这些大理石使得分别能获得相同总值。很可惜,他们意识到有时不可能平分大理石(即使总值是偶数)。例如,如果有1个价值为1,1个价值为3,两个原创 2013-08-27 16:06:20 · 605 阅读 · 0 评论 -
POJ 2184 Cow Exhibition ( 01背包变形 )
题意:牛类想要向世人证明他们聪明又幽默。经过测试,每头牛都有一个幽默度Fi和智商Si,现要求从N头牛中选择若干头牛去参加比赛,假设这若干头牛的智商之和为sumS,幽默度之和为sumF.现要求在所有选择中,在使得sumS>=0&&sumF>=0的基础上,使得sumS+sumF最大并输出其值.分析:01背包dp之后把符合要求的最优解统计出来。但是在解01背包的时候遇到一个问原创 2013-08-22 22:09:25 · 463 阅读 · 0 评论 -
POJ 2262 Goldbach's Conjecture ( 筛选法求素数 )
题意:一个偶数能不能表示为两个奇质数a跟b的和,如果能的话由于这个偶数可能可以表示为多个奇质数对的和,输出时只选取b-a最大的那对奇质数。分析:因为数据达到100W,采用较为高效的筛选法求素数。//1092K 110MS#include #define MAX 1000000#define bool char#define true 1#define false 0bool p原创 2013-08-29 05:49:19 · 543 阅读 · 0 评论 -
POJ 1388 Ugly Numbers
题意:题目意思是求由2,3,5的乘积组成的数从大到小排列,从1开始,2,3,4,5,6,8,9,。。。分析:基本思想是设3个指针,分别表示3个素数乘到哪了,然后通过比较3个指针位置的递推结果来确定下一个数是什么。//172K 0MS#include #define MIN(a,b) ((a)<(b)?(a):(b)) #define N 1502in原创 2013-08-31 00:57:59 · 691 阅读 · 0 评论 -
POJ 1789 Truck History
题目:输入T组数据,每组数据由7个小写字母组成,代表着一种卡车的编号,当T==0时,结束程序。其实就是每组数据相当于一个顶点,每两个顶点之间的边的权值就是这两组数组的字母不同的个数。如(1)aaaaaaaa、(2)baaaaaa;那么1-->2和2-->1的权值就为1。题目是要你找出一棵树,使得这颗树的权值最小,计算出权值Q。输出:The highest possible qu原创 2013-09-01 22:11:57 · 368 阅读 · 0 评论 -
POJ 2828 Buy Tickets ( 线段树—单点更新 )
题意:很多人(1~200000)在后半夜还在排队,由于天太黑,人们即使插队也不会被人发现,每个人的名字由一个整数代表([0, 32767] )。现在一次给出每个人插入的位置,(0代表第一个,1代表第二个。。。),计算N个人插入队后,队中各个位置都是谁。 分析:正向思考的话,这道题就是最简单的模拟了,传统的双层O(n*n),达到了4*10^10 , 计算机每秒处理复杂度的效率在10^原创 2013-08-27 21:43:43 · 537 阅读 · 0 评论 -
POJ 3979 分数加减法
简单模拟。。。细心就好了。。至于约分问题,我用的是欧几里得算法,两个数的最大公倍数为1即不能再约分,还有就是注意卡精度。。//192K 0MS#include #include #define DEBUG "HERE"#define bool char#define true 1#define false 0#define MIN(X,Y) ((X<Y)?(X):(Y))原创 2013-09-07 21:40:17 · 500 阅读 · 0 评论 -
POJ 3041 Asteroids (匈牙利算法)
题意:矩阵上有一些小行星,占据了一些格子,我们每次操作可以清理一列中的所有小行星,也可以清理一行中的所有小行星,问最少进行多少次操作可以清理掉所有的小行星。分析:一个小行星,要么清理该行,要么该列。所以也就是每个小行星对应的行列中至少选择一样来清理。下面建图,如果我们把每行看成集合一中的点,每列看成集合二中的点,一个小行星看成是其对应行列的连线,那么也就是说不能存在某一条连线两边的点都原创 2013-09-02 22:05:32 · 617 阅读 · 0 评论 -
POJ 1251 Jungle Roads ( Prim , Kruscal )
基础的最短路,只是初始化麻烦一些。。不过刚开始老 TEL。。看了discuss 。。才知道数据有问题。。呃。。 改成cin 和cout 就过了。。不过。。。是有空该好好学学C++了= = //252K 0MS#include #include #include #define MAX_COST 105#define N 28#define DEBUG puts("deb原创 2013-09-08 22:23:58 · 404 阅读 · 0 评论 -
POJ 2352 Stars
题意:按y递增的顺序给出n颗星星的坐标(y相等则x递增),每个星星的等级,等于在它左边且在它下边(包括水平和垂直方向)的星星的数量,求出等级为0到n-1的星星分别有多少个。分析:树状数组或者线段树。//416K 141MS 书状数组#include #include #define MAX 32010int c[MAX] ; //树状数组 int原创 2013-09-05 17:16:34 · 394 阅读 · 0 评论 -
POJ 1861 Network (最短路)
题意:给出n个点和m条边,求出最小生成树,输出最小生成树权值最大的第一条边,然后再输出最小生成树的边数,以及每一条边//AC//356K 94MS#include #include #define DEBUG puts("Here") ;#define N 1005 // N 定点数上限#define M 15005 // M 边数上限int father[N]原创 2013-09-11 00:27:35 · 412 阅读 · 0 评论 -
POJ 1321 棋盘问题 ( 深搜)
汉语题意,题目类似八皇后问题,深搜即可。。。貌似可以用状态压缩过,有空再研究研究。。 // 172K 63MS#include #include #include #define N 9using namespace std ;bool graph[N][N] ;bool flag[N][N] ;bool column[N] ;int ans ;voidInit原创 2013-09-30 01:06:00 · 605 阅读 · 0 评论 -
POJ 2034 Anti-prime Sequences
题意:输入m, n, d。求出m,m+1,m+2,````m+n的一个排列。使得任意的连续k个数之和都为合数,2思路:素数打表,然后深搜。。//196K 782MS#include #include #include #include #define N 1005#define MAX N*10#define BUG puts("Hi") ;bool pri原创 2013-09-15 16:14:05 · 503 阅读 · 0 评论 -
POJ 3618 Exploration
简单题。。。 但要注意理解题意,每次都从都选离原点最近的未访问过的点走。。 思路: 将-100,000 ≤ xi ≤ 100,000范围 转换成 0 ~ 200,000 OFFSET(偏移量) 100000 ,由于我是用bool visit[N]。。。虽然代码有点长。。但跑出来的效率比较高。。//376K 63MS#include #include #inclu原创 2013-09-15 16:58:12 · 761 阅读 · 0 评论 -
POJ 2299 Ultra-QuickSort
题意:给出长度为n的序列,每次只能交换相邻的两个元素,问至少要交换几次才使得该序列为递增序列。题目本质就是求逆序对了,简单介绍一下。逆序对是指在序列{a0,a1,a2...an}中,若aij),则(ai,aj)上一对逆序对。而逆序数顾名思义就是序列中逆序对的个数。例如: 1 2 3是顺序,则逆序数是0;1 3 2中(2,3)满足逆序对的条件,所以逆序数只有1; 3 2 1中(1,2)(1,3)原创 2013-09-11 22:32:38 · 488 阅读 · 0 评论