04 2017 档案
URAL 2019 Pair: normal and paranormal (STL栈)
摘要:题意:在一个半圆内,有2*n个点,其中有大写字母和小写字母。其中你需要连接大写字母到小写字母,其中需要保证这些连接的线段之间没有相交。 如果能够实现,将大写字母对应的小写字母的序号按序输出。 析:我把它看成一个括号序列,然后用栈解决即可。 代码如下:
阅读全文
URAL 2021 Scarily interesting! (贪心+题意)
摘要:题意:给定两个队伍的每个人的得分,让你安排怎么比赛才能使得观众知道冠军的时间最长。 析:贪心,很简单,就是先开始总分高的先出最差劲的,总分低的先出最厉害的,这个题当时实在是读的不明白啊,WA了好多次。 代码如下:
阅读全文
URAL 2018 The Debut Album (DP)
摘要:题意:给出n长度的数列,其实1的连续个数不超过a,2的连续个数不超过b。 析:dp[i][j][k] 表示前 i 个数,以 j 结尾,并且连续了k个长度,要用滚动数组,要不然MLE。 代码如下:
阅读全文
HDU 5236 Article (概率DP+贪心)
摘要:题意:要求输入一篇N个字符的文章,对所有非负整数i:每到第i+0.1秒时可以输入一个文章字符,每到第i+0.9秒时有P的概率崩溃(回到开头或者上一个存盘点) 每到第i秒有一次机会可以选择按下X个键存盘,或者不存,打印完整篇文章之后必须存盘一次才算完成输入多组N,P,X选择最佳策略使得输入完整篇文章时
阅读全文
HDU 5245 Joyful (期望)
摘要:题意:进行K次染色,每次染色会随机选取一个以(x1,y1),(x2,y2)为一组对角的子矩阵进行染色,求K次染色后染色面积的期望值(四舍五入)。 析:我们可以先求出每个格子的期望,然后再加起来即可。我们可以把格子进行划分,然后再求概率。 代码如下:
阅读全文
HDU 5242 Game (贪心)
摘要:题意:给定一棵树,要求从根结点1走k次,每次都是到叶子结点结束,把走过的所有的结点权值加起来,最大是多少。 析:先把每个结点到根结点的路径之和求出来,然后按权值从大到小排序,然后每次把路径中的权值求出来,最后求前k个值的和即可。 代码如下:
阅读全文
HDU 1890 Robotic Sort (Splay)
摘要:题意:将一列数字排序 排序规则是 每次找到最小值的位置loc 将1~loc所有数字颠倒 然后删掉第一位 直到排好序 排序要求是稳定的。 析:直接用splay来维护最小值,然后插入删除即可。 代码如下:
阅读全文
BZOJ 1500 [NOI2005]维修数列 (splay)
摘要:1500: [NOI2005]维修数列 Description Input 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列中数的个数,M表示要进行的操作数目。第2行包含N个数字,描述初始时的数列。以下M行,每行一条命令,格式参见问题描述中的表格。任何时刻数列中最多含有50
阅读全文
POJ 3690 Constellations (哈希)
摘要:题意:给定上一n*m的矩阵,然后的t个p*q的小矩阵,问你匹配不上的有多少个。 析:可以直接用哈希,也可以用AC自动机解决。 代码如下:
阅读全文
POJ 3691 DNA repair (DP+字符串)
摘要:题意:给出nn(1≤n≤50,1≤n≤50) 个病毒DNA序列,长度均不超过20。现在给出一个长度不超过1000的字符串,求至少要更换多少个字符, 才能使这个字符串不包含这些DNA序列。 析:利用前缀来做好状态转移。 代码如下:
阅读全文
SPOJ QTREE Query on a tree (树链剖分+线段树)
摘要:题意:给定一棵树,然后有一些操作,有两种,一种是改变某条边的权值,第二种是询问从u->v的路径中,边权最大的是多少。 析:就一个树链剖分,然后用线段树维护即可。 代码如下:
阅读全文
HDU 3966 Aragorn's Story (简单树链剖分)
摘要:题意:给一棵树,并给定各个点权的值,然后有3种操作: I C1 C2 K: 把C1与C2的路径上的所有点权值加上K D C1 C2 K:把C1与C2的路径上的所有点权值减去K Q C:查询节点编号为C的权值 析:就是简单的树链剖分,可以用树状数组来维护,然后就OK了。 代码如下:
阅读全文
UVaLive 11525 Permutation (线段树)
摘要:题意:有一个由1到k组成的序列,最小是1 2 … k,最大是 k k-1 … 1,给出n的计算方式,n = s0 * (k - 1)! + s1 * (k - 2)! +… + sk-1 * 0!, 给出s1…sk,输出序列里第n大的序列。 析:我们先看第一数,如果第一个数是2,那么它前面至少有(k
阅读全文
UVaLive 5031 Graph and Queries (Treap)
摘要:题意:初始时给出一个图,每个点有一个权值,三种操作:(1)删除某个边;(2)修改每个点的权值;(3)询问与节点x在一个连通分量中所有点的第K大的权值。 析:首先是要先离线,然后再倒着做,第一个操作就成了加边操作,很容易实现,第二操作,就是分成两个操作,先把x结点删掉,然后再插入一个新结点, 最后一个
阅读全文
UVa 11468 Substring (AC自动机+概率DP)
摘要:题意:给出一个字母表以及每个字母出现的概率。再给出一些模板串S。从字母表中每次随机拿出一个字母,一共拿L次组成一个产度为L的串, 问这个串不包含S中任何一个串的概率为多少? 析:先构造一个AC自动机,然后随机生成L个字母,就是在AC自动机的某个结点走多少步,dp[i][j] 表示在 i 结点,并且剩
阅读全文
ZOJ 3939 The Lucky Week (暴力找规律)
摘要:题意:给定一个幸运日,求第 k 个幸运日是多少。 析:由于闰年,每400肯定会循环一次,所以我们就可以先找出每400年会有多少幸运日,是2058个,然后再暴力。 代码如下:
阅读全文
UVa 11020 Efficient Solutions (BST)
摘要:题意:给按顺序给定 n 个人群,用x和y来描述,如果有没有任何一个x' < x y' <= y 或 x '<= x y' <= y,那么这个群体就是优势群体, 让你求出每放入一个人群,已经知道的群体有几个优势群体。 析:首先我们知道的是,如果某个群体失去了优势,那么该群体就不可能再获得优势,然后我们
阅读全文
POJ 3693 Maximum repetition substring (后缀数组+RMQ)
摘要:题意:给定一个字符串,求其中一个由循环子串构成且循环次数最多的一个子串,有多个就输出最小字典序的。 析:枚举循环串的长度ll,然后如果它出现了两次,那么它一定会覆盖s[0],s[ll],s[ll*2].....这些点中相邻的两个,然后向前和向后匹配, 看看最大的匹配多大,然后把所有的答案记录下来,最
阅读全文
SPOJ - REPEATS Repeats (后缀数组+RMQ)
摘要:题意:求一个串中出现重复子串次数最多的数目。 析:枚举每个长度的子串,至少要重复两次,必然会经过s[l*i]中相邻的两个,然后再分别向前和向后匹配即可。 代码如下:
阅读全文
ZOJ 3946 Highway Project (最短路)
摘要:题意:单源最短路,给你一些路,给你这些路的长度,给你修这些路的话费,求最短路和最小花费。 析:本质就是一个最短路,不过要维护两个值罢了,在维护花费时要维护的是该路要花多少,而不是总的路线花费。 代码如下:
阅读全文
HDU 5860 Death Sequence (递推)
摘要:题意:n个人排成一行,从第一个人开始,每个k个人报数,报到数的人被杀死,剩下的人重新排成一行再报数。一共q个询问,每次询问第qi个死的人是谁。 析:是一个约瑟夫的变形,我们要考虑子问题的问题同样编号是0-n-1,如果在某一轮,第 i 个人如果能取模 k 为0,那么这一轮他就会被干掉,如果不是 那么下
阅读全文
HDU 5862 Counting Intersections (离散化+扫描线+树状数组)
摘要:题意:给你若干个平行于坐标轴的,长度大于0的线段,且任意两个线段没有公共点,不会重合覆盖。问有多少个交点。 析:题意很明确,可是并不好做,可以先把平行与x轴和y轴的分开,然后把平行y轴的按y坐标从小到大进行排序,然后我们可以枚举每一个平行x轴的线段, 我们可以把平行于x轴的线段当做扫描线,只不过有了
阅读全文
POJ 3616 Milking Time (DP)
摘要:题意:奶牛Bessie在0~N时间段产奶。农夫约翰有M个时间段可以挤奶,时间段f,t内Bessie能挤到的牛奶量e。奶牛产奶后需要休息R小时才能继续下一次产奶, 求Bessie最大的挤奶量。 析:一个很水的DP,就是不能再表示时刻了,而是区间,dp[i] 第 i 个区间 最大是多少。 代码如下:
阅读全文
URAL 1297 Palindrome (后缀数组+RMQ)
摘要:题意:给定一个字符串,求一个最长的回回文子串,多解输出第一个。 析:把字符串翻转然后放到后面去,中间用另一个字符隔开,然后枚举每一个回文串的的位置,对第 i 个位置,那么对应着第二个串的最长公共前缀, 求最长公共子串,可以用RMQ解决。 代码如下:
阅读全文
HDU 1078 FatMouse and Cheese (记忆化搜索)
摘要:题意:给定一个n*n的矩阵,问从(0,0)开始走,每次最多水平或者垂直走k个格子,且要保证每次到达的格子要大于前一个,问最大和是多少。 析:一个很简单的记忆搜索,dp[i][j],表示到达(i,j)的最大和是多少,我们可以反着推出答案。 代码如下:
阅读全文
HDU 3915 Game (高斯消元)
摘要:题意:有n堆石子,每个人只能从某一堆至少拿走一个,不能拿者败。问事先拿走某些堆的石子,使得先手必败。 析:将石子拆成二进制,未知数为1表示保留该堆石子,为0表示事先拿走该堆石子。最后求自由变元的数目,就是2的幂。 代码如下:
阅读全文
POJ 3764 The xor-longest Path (字典树)
摘要:题意:给出一颗n个节点的边权树,求一条路径(u,v),使得路径上的边的权值异或值最大。 析:先从0开始遍历树,记录所有的点到0的路径的边权异或值,然后任意两点的路径的异或值就是dp[u]^dp[v], 然后再构造一棵二进制树,每次查询,注意长度要相同,最后求最大值即可。 代码如下:
阅读全文
HDU 5546 Ancient Go (搜索)
摘要:题意: Alice和Bob正在下古代围棋,规则如下: 棋盘有8×8个格子,棋子下在棋盘的交叉点上,故可以有9×9个落子的位置 Alice执黑棋Bob执白棋轮流落子 与棋子直线相连的空白交叉点叫做气。当这些气都被对方棋子占据后,该棋子就没有了“气”,要被从棋盘上提掉。如果棋子的相邻(仅上下左右)直线交
阅读全文
HDU 5542 The Battle of Chibi (离散化+树状数组优化DP)
摘要:题意:求n个数中长度为m的上升子序列的个数。 析:很容易想到一个n的三次方的DP,dp[i][j]表示第 i 个数长度为 j 的LIS 有多少个,但是会TLE,因此必须优化,dp[i][j] = sum{dp[k][j-1] | a[i] > a[k]} 我们可以用树状数组优化,当然用线段树也OK,
阅读全文
UVaLive 7637 Balanced String (构造)
摘要:题意:给定一个括号的序列,原先的序列是碰到左括号加1,碰到右括号减1,然后把序列打乱,让你找出字典序最小的一个答案。 析:直接从第一个括号判断就好了,优先判断左括号,如果不行就加右括号。 代码如下:
阅读全文
浙公网安备 33010602011771号