POJ-OJ
PKU_CXK
北京大学信息科学技术学院
展开
-
POJ 2255:重建二叉树
http://bailian.openjudge.cn/practice/2255/思路在前序中找到根节点(每个前序串的第一个字符),然后在中序串中找到根节点的位置。前半部分是左子树,后半部分是右子树,递归输出。#include <iostream>#include <cstdio>using namespace std;string front,...原创 2018-07-07 17:21:43 · 503 阅读 · 0 评论 -
POJ 1001:Exponentiation —— 高精度浮点数运算
总时间限制: 500ms 内存限制: 65536kB 描述 Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the national debt is a taxing experi原创 2017-07-08 11:02:29 · 840 阅读 · 0 评论 -
LeetCode | 38. Count and Say
The count-and-say sequence is the sequence of integers with the first five terms as following:1. 12. 113. 214. 12115. 1112211 is read off as “one 1” or 11. 11 is read off as “t原创 2017-06-10 18:33:49 · 260 阅读 · 0 评论 -
LeetCode | 36. Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.The Sudoku board could be partially filled, where empty cells are filled with the character ‘.’. A partially filled sudoku whi原创 2017-06-05 20:59:07 · 318 阅读 · 0 评论 -
N后问题
n后问题 总时间限制: 1000ms 内存限制: 65536kB描述 n 后问题要求在一个 n * n 格的棋盘上放置n个皇后,使得他们彼此不受攻击。按照国际象棋的规则,一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其它任何棋子。因此,n 后问题等价于要求在一个 n * n 格的棋盘上放置 n 个皇后,使得任何 2 个皇后不能在同一行或同一列或同一斜线上。输入 一个正整数n(1 <= n原创 2017-04-03 15:28:38 · 1452 阅读 · 0 评论 -
多重背包问题
描述 给定M(1<=M<=200)以及长度为M的四个数组,分别记为Pairs、Multi、Low、Up,你需要构造一个长度为M的数组Table(其中Low[i]<=Table[i]<=Up[i]),满足∑Multi[i]*Table[i] = 0,且使得∑Pairs[i]*Table[i]尽量大。 输入 包含多组测试数据。每组数据第一行原创 2017-03-24 20:36:43 · 1036 阅读 · 0 评论 -
POJ 1700 过河问题(Crossing River)
总时间限制: 1000ms 内存限制: 65536kB 描述 A group of N people wishes to go across a river with only one boat, which can at most carry two persons. Therefore原创 2017-03-31 20:29:49 · 600 阅读 · 0 评论 -
POJ 2001 : Shortest Prefixes (字典树)
题意 : 给你一些字符串,让你为每个字符串找一个最短的前缀,来唯一标识这个字符串,与其他字符串区别开来.这个标志串不能是其他字符串的前缀,除非这个标志串等于这个字符串本身.考虑用字典树来做.标志当前位是否是结尾位,作为一个边界条件.先将所有字符串按长度排序,每次对一个字符串按位插入字典树里,将路过的位置num加1.最后,如果当前位的num是1,说明到当前位为止的前缀可以唯一标志这个字符串,保存这个原创 2016-12-21 00:04:25 · 472 阅读 · 0 评论 -
POJ 3745 : Training little cats(矩阵快速幂加优化)
总时间限制: 2000ms 内存限制: 65536kB 描述 Facer’s pet cat just gave birth to a brood of little cats. Having considered the health of those lovely cats, Face转载 2016-12-20 21:39:58 · 468 阅读 · 0 评论 -
POJ 1785 : Binary Search Heap Construction
描述 Read the statement of problem G for the definitions concerning trees. In the following we define the basic terminology of heaps. A heap is a tree whose internal nodes have each assigned a pr原创 2016-12-20 21:12:05 · 606 阅读 · 0 评论 -
POJ | 4135:月度开销
总时间限制: 1000ms 内存限制: 65536kB 描述 农夫约翰是一个精明的会计师。他意识到自己可能没有足够的钱来维持农场的运转了。他计算出并记录下了接下来 N (1 ≤ N ≤ 100,000) 天里每天需要的开销。约翰打算为连续的M (1 ≤ M ≤ N) 个财政周期创建预算案,原创 2017-07-19 10:56:32 · 3440 阅读 · 0 评论 -
POJ 2479 分解因数
题目链接 http://bailian.openjudge.cn/practice/2749/#include <iostream>#include <cstdio>using namespace std;int f(int begin, int tot){ int res = 1; // 自己本身就是1个 if(beg...原创 2018-04-17 19:58:46 · 679 阅读 · 0 评论 -
POJ 2251:Dungeon Master
http://bailian.openjudge.cn/practice/2251/思路“3D”的BFS,其实就是多个两个搜索的方向。(上下前后左右)#include <iostream>#include <queue>using namespace std;int L, R, C, Find, FindStep;int startx, star...原创 2018-07-07 16:12:43 · 218 阅读 · 0 评论 -
POJ 滑动窗口(优先队列的应用)
数据结构与算法A (第三章 栈与队列 练习题): 滑动窗口思路对于最大最小值分别维护一个优先队列(保存元素下标)。以最小值为例。 每次遇到一个新元素,从队尾插入。插入时删去队列中比该值大的元素。(因为当前值出现的下标较晚,所以以后一定范围窗口的最小值不会超过该值)。队首是当前窗口的最小值。同时要注意维护队首的下标是否在当前窗口内。#include <iostream&g...原创 2018-07-11 13:18:59 · 1709 阅读 · 0 评论 -
POJ 数据结构与算法A 0407:去除C程序中的注释
http://dsa.openjudge.cn/string/0407/ 直接贴代码,注释说明的很详细。#include <iostream>#include <algorithm>#include <string>#include <cstring>#include <cstdio>#include <vect...原创 2018-07-11 00:39:45 · 999 阅读 · 0 评论 -
KMP 算法的应用
KMP算法的应用主要体现在Next数组的计算方式上。Next数组含义如下: Next[i] = j, 表示下标 i 之前连续 j 个字符,和字符串开始的连续 j 个字符相同。这会带来很多应用。比如1、POJ 2406:字符串乘方#include <iostream>#include <algorithm>#include <string>#i...原创 2018-07-10 23:59:31 · 1466 阅读 · 0 评论 -
POJ 1129: Channel Allocation
http://bailian.openjudge.cn/practice/1129/ 搜索问题。用递归超时,直接用模拟法枚举即可3ms ACAC代码:染色问题。枚举相邻接点的颜色,找到最小可以使本节点染色的颜色,进行染色。#include <iostream>#include <vector>#include <cstdio>#include &...原创 2018-04-23 22:32:08 · 384 阅读 · 0 评论 -
POJ 3714 最近点对
POJ 3714 最近点对描述 给定点集A和点集B,两个点集分别有N个顶点。问任意顶点对(a,b)的最近距离是多少,其中a属于A,b属于B。输入 第一行为数据个数T,表示接下来有T个测试数据。 对于每个测试数据: 第一行为顶点个数N。(N<=100,000) 接下来N行,每行两个整数,表示点集A中的N个点的坐标。 再接下来N行,每行两个整数,表示点集B中的N个点的坐标...原创 2018-04-12 22:08:22 · 1334 阅读 · 0 评论 -
POJ 1065 Wooden Sticks(贪心法)
题目链接 http://bailian.openjudge.cn/practice/1065/思路:贪心法。对所有wood按照len升序、weight升序排序。对于每一个wood,向后查找,尽可能找到能覆盖它的wood,并将覆盖它的wood标进行加工(不需要额外的setup time)。遍历时,如果当前wood未加工,setup time 加1#include <iostrea...原创 2018-04-17 22:18:25 · 374 阅读 · 0 评论 -
POJ 1011 Sticks(搜索问题)
题目链接 http://bailian.openjudge.cn/practice/1011/思路一(TLE): 输入数据时,计算出需要枚举的原始棍子长度的上界下界,然后枚举。对每一个stick,将他归到某一组棍子中(如果当前枚举的原始棍子长度为i,一组棍子的总和就应该恰好是i),然后搜索。#include <iostream>#include <algorithm...原创 2018-04-17 21:41:48 · 375 阅读 · 0 评论 -
POJ 2479 Maximum sum (动态规划)
题目链接 http://bailian.openjudge.cn/practice/2479/用两次动态规划,否则超时#include <iostream>#include <cstdio>using namespace std;int T, N;long long A[51000];long long front_sum[51000], bac...原创 2018-04-17 20:00:28 · 488 阅读 · 0 评论 -
POJ 1830 开关问题(高斯消元法)
中文题目,就不说题目大意了 解题思路: 由于对于每一个开关最多改变一次,那么对于每一个开关,只有改变与不改变两种操作,设改变操作为1,不改变操作为0,那么对开关的操作可以用一个n维向量x⃗ T=(x1,x2,⋯,xn)。 我们需要知道初始状态经过某次操作之后的状态,并拿它与目标状态比较。我们知道,对于开关i。转载 2016-12-20 10:09:38 · 664 阅读 · 0 评论 -
百练 1258 : Agri-Net(最小生成树)
这个题目是让你求出联通所有点所需要的最小代价,就是最小生成树问题.之前学过Kruskal算法,就用并查集写了个最小生成树的生成算法.Kruskal算法:将边按权重大小排序,每次取权重最小的边,如果两个点属于不同的集合,归并,否则遍历下一条边,知道所有点都在同一集合,归并结束.总时间限制: 1000ms 内存限制: 65536kB**描述**Farmer John has been elected原创 2016-12-14 15:59:47 · 390 阅读 · 0 评论 -
促销活动 (优先队列的应用)
描述 Great Bytelandish超市联盟想请你编写一个程序模拟计算促销活动的开销促销活动遵守以下规则:参加促销活动的客户,可以在消费结束后将自己的消费账单投入一个指定的投票箱里当一天的促销活动结束时,将从投票箱中选出两份账单:一份是消费金额最大的账单,一份是消费金额最小的账单。最大金额账单对应的客户,将得到一笔奖金,奖金数等于金额最大的账单与金额最小的账单之间的差值。输入保证总可以找到这样原创 2016-12-08 03:07:27 · 1844 阅读 · 0 评论 -
社交网络 (并查集的应用)
很简单的并查集基础应用,相当于连通图的问题,将可连接的节点归并到同一个节点下即可.直接上代码.描述 随着社交平台的兴起,人们之间的沟通变得越来越密切。通过Facebook的分享功能,只要你是对方的好友,你就可以转发对方的状态,并且你的名字将出现在“转发链”上。经过若干次转发以后,很可能A分享了一条好友C的状态,而C的这条状态实际上是分享B的,但A与B可能并不是好友,即A通过C间接分享了B的状态。原创 2016-12-08 03:05:26 · 2009 阅读 · 0 评论 -
欧拉回路
欧拉图的充要条件:是连通图并且奇度顶点个数为0. 判断是否是连通图一方面可以用搜索/遍历,另一方面可以用并查集,归并的思想.但是这个题目的数据貌似有点问题,导致有些方法交上去一直是9分(满分10分)就很气了.下面放上10分的AC代码描述欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路给定一个无向图,请判断该图是否存在欧拉回路输入 输入数据包含若干测试用例 每个测试用原创 2016-12-07 19:48:59 · 489 阅读 · 0 评论 -
中缀表达式的值
由于不想循规蹈矩…所以,不想转后缀再求后缀表达式的值,所以就直接利用中缀表达式和两个栈进行求值,一个栈放数字,另一个栈放操作符.调试的时候稍微遇到了些瓶颈,不过大体来说还是比较顺利的.就是要注意栈非空,栈里只有一个左括号等条件的判定.中缀表达式的值总时间限制: 200ms 内存限制: 1024kB描述人们熟悉的四则运算表达式称为中缀表达式,例如(23+34*45/(5+6+7))。在程序设计语言中,原创 2016-12-06 14:08:00 · 1783 阅读 · 0 评论 -
POJ 1463 :Strategic game 树形动规
`Time Limit: 2000MS Memory Limit: 10000KDescriptionBob enjoys playing computer games, especially strategic games, but sometimes he cannot find the solution fast enough and then he is very sad. Now原创 2016-12-06 01:33:55 · 411 阅读 · 1 评论 -
POJ 2559 Largest Rectangle in a Histogram --维护单调栈
相当于对于当前点 i ,求向左和向右分别能延伸到的位置 l[i], r[i],然后最后求 MAX(h[i] * (r[i]-l[i]) ).意思是向两边找到比它矮的位置为止.至于为什么比他矮就不能延伸了,这是因为要计算的高度是 h[i],如果遇到比 h[i] 小的还继续延伸,那么另一端也可以继续延伸,动态规划就不成立了.求 l[i] 时,维护一个递增栈,考虑当前的 i,如果栈顶元素不小于 i ,弹出原创 2016-12-05 22:01:07 · 390 阅读 · 0 评论 -
Onenjudge 百炼 1703 ---- 发现它,抓住它 (并查集的应用)
发现它,抓住它 一个城市中有两个犯罪团伙A和B,你需要帮助警察判断任意两起案件是否是同一个犯罪团伙所为,警察所获得的信息是有限的。假设现在有N起案件(N<=100000),编号为1到N,每起案件由团伙A或团伙B所为。你将按时间顺序获得M条信息(M<=100000),这些信息分为两类: 1、 D [a] [b] 其中[a]和[b]表示两起案件的编号,这条信息表明它们属于不同的团伙所为2、A [a] [b]原创 2016-12-01 20:04:50 · 5231 阅读 · 3 评论 -
百炼 4088 集合运算
4088:集合运算总时间限制: 3000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB描述 设 A = {a1, a2, … , an}, B = {b1, b2, … , bm} 是非负整数集合,其中m = O(logn)。 设计算法计算集合 C = (A − B) ∪ (B − A)。输入 输入文件包含2行。 第1行的第一个数为n,表示A集合的大小,接下来跟有原创 2016-12-01 13:31:47 · 1910 阅读 · 0 评论 -
百炼 2804 词典
2804:词典总时间限制: 3000ms 内存限制: 65536kB描述你旅游到了一个国外的城市。那里的人们说的外国语言你不能理解。不过幸运的是,你有一本词典可以帮助你。输入首先输入一个词典,词典中包含不超过100000个词条,每个词条占据一行。每一个词条包括一个英文单词和一个外语单词,两个单词之间用一个空格隔开。而且在词典中不会有某个外语单词出现超过两次。词典之后是一个空行,然后给出一个由外原创 2016-12-01 12:01:04 · 2339 阅读 · 0 评论 -
如何运用归并排序快速求得逆序对数目
逆序对数目可以直接穷举,但效率很低,O(n^2)级别. 可以用树状数组写. 这里介绍运用归并排序来求逆序对数目.归并排序过程中,针对两个内部有序的串, 实现插入排序,即两串开头的元素,小的进入目标串,直到所有元素都输出. 假设左串当前元素比右串当前元素大. 那么左串剩下的元素一定都比右串当前元素大,都是逆序对. 那么这里逆序对就有 (mid - index_left + 1 )对累加,最原创 2016-12-08 03:12:46 · 2703 阅读 · 1 评论 -
OpenJudge : Rainbow的商店 (模拟)
维护天数和价值的递增的序列(用结构体 + sort实现),对天数进行枚举,输出当前天数以及当前天数之后的最大的价值,并将这个价值的访问数组置为1,下次不再访问.累加获得res,输出结果.描述Rainbow开了一家商店,在一次进货中获得了N个商品。已知每个商品的利润和过期时间。Rainbow每天只能卖一个商品,并且过期商品不能再卖。Rainbow也可以选择在每天出售哪个商品,并且一定可以卖出。由于原创 2016-12-08 11:31:34 · 1429 阅读 · 0 评论 -
POJ 2446 : Chessboard(二部图算法)
可以将棋盘看成国际象棋的棋盘,也就是说,相邻两格的颜色不同,设为白色和黑色.那么白色格子和黑色格子就构成了一个二部图,只能在异色格子之间连线.现在就是要求完美二部图匹配,判断最后的匹配数是否等于没有洞的格子数.这里我用邻接链表来当存储结构,节省了很大空间开销. 总时间限制: 2000ms 内存限制: 65536kB原创 2016-12-17 01:19:58 · 607 阅读 · 0 评论 -
趣味理解匈牙利算法(转载)
【书本上的算法往往讲得非常复杂,我和我的朋友计划用一些简单通俗的例子来描述算法的流程】匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。——-等等,看得头大?那么请看下面的版本:通过数代人的努力,你终于赶上了剩男剩女的大潮,假设你是一位转载 2016-12-17 01:13:16 · 493 阅读 · 0 评论 -
POJ 2752: Seek the Name, Seek the Fame(简单KMP-NEXT数组的应用)
题意大概就是给你一个很长的字符串,然后让你找所有满足”前缀=后缀”的长度.很显然,使用KMP里的求解NEXT数组的思想.最长的是串的长度,假设为len这里将next数组做一个变形,让next[i] = next[i+1],那么,第二长的长度就是next[len-1].通过举例子可以发现,这是个不断迭代的过程,第三长的是next[ next[len-1] -1 ],最后直到next[t]<1时迭代结束原创 2016-12-16 14:16:00 · 417 阅读 · 0 评论 -
POJ 4093 倒排索引查询(STL set 的应用)
这个主要就是一个集合的交-差问题.由于数据量比较大,考虑用 STL 里面的SET 来当数据结构,存储每个单词出现的文档编号.我的思路是,找到一个为 1 的单词的下标,把这个单词的文档编号输出到 res 中,然后遍历,遇到0,什么也不做;遇到-1,就判断res中是否有这些文档,如果有,就删除;遇到1,就取交集,这里可以用一个 temp set集合来存储公共元素.(或者直接用两个迭代器在两个SET里面遍原创 2016-12-16 14:04:45 · 833 阅读 · 0 评论 -
发型糟糕的一天(简单的单调栈运用)
提供两种解法,比较类似 一种是从后向前维护单调递增栈; 另一种是从前向后维护单调递减栈.描述农夫John 的N(1 ≤ N ≤ 80,000)只奶牛中,有一些也许正在经历发型糟糕的一天。每只奶牛对自己乱糟糟的发型都有自知之明,农夫John想知道所有奶牛能看到其他奶牛头顶的数量之和。任意奶牛i身高记为 hi (1 ≤ hi ≤ 1,000,000,000),所有奶牛面向东方(本题示意图的右面)依原创 2016-12-09 17:06:56 · 1080 阅读 · 0 评论 -
用邻接链表和队列实现拓扑排序
之前写拓扑排序是通过邻接矩阵写的,应对小的数据量还可以,但要是顶点数很大时,开的邻接矩阵就未免太大了.今天学习了用邻接表实现拓扑排序,比较简单,所幸,写完后一遍编译通过 + 一遍AC.**描述**给出一个图的结构,输出其拓扑排序序列,要求在同等条件下,编号小的顶点在前**输入**若干行整数,第一行有2个数,分别为顶点数v和弧数a,接下来有a行,每一行有2个数,分别是该条弧所关联的两个顶点编号**原创 2016-12-09 16:00:51 · 1959 阅读 · 0 评论