ACM-ICPC训练题解
文章平均质量分 75
phython96
ACM退役~
展开
-
四边形不等式
四边形不等式优化一种动态规划递推式:fi=min0≤j<i{fj+w(j+1,i)}f_i=min_{0\le j\lt i}\{f_j+w(j+1,i)\}fi=min0≤j<i{fj+w(j+1,i)} 典型题目:序列划分fi,j=mini≤k<j{fi,k+fk+1,j+w(i,j)}f_{i,j}=min_{i\le k \lt j}\{f_{i,k}+f_...原创 2020-03-01 11:13:28 · 475 阅读 · 0 评论 -
NOIP2019 Emiya家今天的饭
NOIP2019 Emiya家今天的饭ACM退役选手远程口胡考虑使用容斥方法:1采用动态规划,先求出在无限制情况下,安排kkk种烹饪方法总的方案数.记dp2[i][j]dp2[i][j]dp2[i][j]表示已经考虑完前iii种烹饪方法,共做了jjj个菜的方案数.那么显然,决策分2种情况,用或不用第iii种烹饪方法,用的话就只能选一种主要食材.dp2[i][j]=dp2[i−1][j...原创 2019-11-17 17:15:12 · 2065 阅读 · 0 评论 -
Connected Component 并查集
DescriptionDriver Fang is given NN nodes, each node is labeled with an integer between 11 and 10000001000000 (inclusive and labels are not necessarily distinct). Two nodes have an edge betwe原创 2017-03-19 10:09:34 · 300 阅读 · 0 评论 -
水题 矩阵快速幂
Description函数 f:Z+→Zf:Z+→Z。已知 f(1),f(2)f(1),f(2) 的值,且对于任意 x>1x>1,有 f(x+1)=f(x)+f(x−1)+sin(πx2)f(x+1)=f(x)+f(x−1)+sin(πx2)。求 f(n)f(n) 的值。Input多组数据。(数据组数 T≤100T≤100)每组数据包含原创 2017-03-19 10:17:32 · 281 阅读 · 0 评论 -
公共子串 字符串哈希
You are given two long strings AA and BB. They are comprised of lowercase letters. You should compute how many suffixes of AA are the prefixes of BB.InputIn the first line is a numbe原创 2017-03-19 10:22:55 · 332 阅读 · 0 评论 -
数学题 贪心+二分答案
Description现在有两个数组 AA 和 BB, 分别包含 xx 与 yy 个元素。定义一个新的数组 CC, CC 中包含 x×yx×y 个元素,为 AA 中所有元素除以 BB 中所有元素。即 新集合为 {c∣c=ab,a∈A,b∈B}{c∣c=ab,a∈A,b∈B} 。特殊地,CC 为多重集合。请求 CC 数组的第 kk 大数。I原创 2017-03-19 10:27:22 · 398 阅读 · 0 评论 -
Prufer序列 生成树定理
Description在图论中,树的定义是连通且无环的无向图。对于一棵有 nn 个节点且节点从 11 到 nn 编号的树,它的 Prufer 序列是一个唯一的长为 n−2n−2 的标号序列。 Prufer 序列的构造方法:每次删除树中标号最小的叶子节点(即度为 11 的节点),将该点的邻居加到当前 Prufer 序列的末尾,直到只剩两个节点为止。例子:原创 2017-03-19 10:38:10 · 1218 阅读 · 0 评论 -
L3-002 堆栈 树状数组+二分答案
题目详情点击这里思路:用std::stack来表示题目中说的栈,现在关键问题就是如何找到中位数。可以用二分答案+树状数组的方法由于每个元素最大不超过1e5,因此开一个大小为1e5的树状数组来存储不超过x的数有多少个每次push一个元素,都把以它为下标的树状数组位置+1,pop就相当于-1这样的话sum(x)的含义就是栈中不超过x的数有多少个。然后就可以用二分的方法把答案确定出来原创 2017-03-21 20:40:04 · 678 阅读 · 0 评论 -
等差区间 线段树+GCD
Description已知一个长度为 nn 的数组 a[1],a[2],…,a[n]a[1],a[2],…,a[n],我们进行 qq 次询问,每次询问区间 a[l],a[l+1],…,a[r−1],a[r]a[l],a[l+1],…,a[r−1],a[r],数字从小到大排列后,是否会形成等差数列。等差数列的定义为,数列相邻两项(后一项减去前一项)的差值相等。Input原创 2017-03-19 10:02:56 · 544 阅读 · 6 评论 -
L2-013 红色警报 并查集
题目连接题解:连通块问题显然要与并查集有关,而且C4比赛极喜欢出与并查集有关的知识。这道题可以这样做,即我每次去掉一个城市的时候,都对剩余的城市重新建立并查集,然后判断联通块的数量有没有删减,如果联通块的数量没变说明没有破坏连通性,而如果改变了说明破坏了连通性,这样虽然很暴力,时间复杂度很高,但是仍然能过。。。不得不说数据很弱。当然这道题也可以这样做,由于当攻陷一个城市的时候,我们需要原创 2017-03-21 21:18:59 · 892 阅读 · 0 评论 -
L2-004 这是二叉搜索树吗?
题目链接题解:这道题目我能想到两种做法,方法1:直接根据树的前序遍历来建树(分两种情况)在建树的过程中,判断是否满足二叉搜索树的条件,如果不满足设置标志位。然后建树完成以后,对树进行dfs后序遍历,这种方法很暴力,也很容易理解,但是代码有点繁琐。方法2:直接在前序遍历的结果上进行dfs,分成两个子树进行dfs,在dfs的过程中,记录得到左子树的最大最小值,和右子树的最大最小值原创 2017-03-21 23:08:55 · 3904 阅读 · 0 评论 -
L2-016 愿天下有情人都是失散多年的兄妹 CCCC
呵呵。大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人、父母、祖父母、曾祖父母、高祖父母)则不可通婚。本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚?输入格式:输入第一行给出一个正整数N(2 4),随后N行,每行按以下格式给出一个人的信息:本人ID 性别 父亲ID 母亲ID其中ID是5位数字,每人不同;性别M代表男性、F代表女性。如果原创 2017-03-22 12:30:14 · 680 阅读 · 0 评论 -
2016陕西省ACM省赛 HE 字符串处理 删除注释
HE发布时间: 2017年3月27日 18:28 最后更新: 2017年3月27日 18:30 时间限制: 1000ms 内存限制: 256M描述"Hi there, my name is HE."在某个秘密的计算机实验室中,超级人工智能计算机 HE 诞生了。HE 可以在网络中搜索合适的程序代码进行自我升级。在某次升级的过程中,HE 得到了一堆软件代原创 2017-04-01 20:06:26 · 646 阅读 · 0 评论 -
2016陕西省ACM 热身体B 种类并查集
Energy发布时间: 2017年3月27日 11:31 最后更新: 2017年3月27日 18:30 时间限制: 1000ms 内存限制: 256M描述人类准备发射载人飞船前往火星。飞船使用了一种特殊的反物质燃料来作为动力,在飞船的制造期间,同时人类也在从宇宙的各个地方收集这种反物质燃料。收集到的燃料被压缩成一些能量块存储在仓库中。由于对反物质原创 2017-04-01 20:18:47 · 569 阅读 · 0 评论 -
2016陕西省省赛 ACM Rui and her functions B 二分
Rui and her functions发布时间: 2017年3月27日 15:45 最后更新: 2017年3月28日 12:43 时间限制: 10000ms 内存限制: 256M描述Rui is magnificently gifted. Why does she not play with me tonight? Oh, she is obsessin原创 2017-04-02 12:38:50 · 703 阅读 · 0 评论 -
节操大师 北方大学生程序设计竞赛 南开大学
DescriptionMK和他的小伙伴们(共n人,且保证n为2的正整数幂)想要比试一下谁更有节操,于是他们组织了一场节操淘汰赛。他们的比赛规则简单而暴力:两人的节操正面相撞,碎的一方出局,而没碎的一方晋级(脑补一下端午节的碰鸡蛋游戏>_通过理性的研究,你测算出他们的节操值分别为1,2,...,n,我们不妨称这个值为“硬度”吧。同时你又测出了一个节操常数k:当两个硬度相差超过k的节操相撞原创 2017-04-04 09:38:34 · 777 阅读 · 0 评论 -
北方大学 ACM 多校训练赛 第十五场 蜘蛛牌A
题目描述XCX最近迷上了玩蜘蛛牌。蜘蛛牌是windowsxp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比它大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也跟着一起移动,游戏的目的是将所有的牌按同一花色从小到大排好。为了简单起见,我们的游戏只有同一花色的牌,但是这样XCX又觉得太简单了,于是他把牌数增加到了n(1输入描述第一行T(1输出描原创 2017-06-11 17:24:07 · 401 阅读 · 0 评论 -
Cube Or 北方大学生训练赛
Cube OrTime Limit: 2000/2000 MS(Java/Others) Memory Limit: 262144/262144 K(Java/Others) Problem Description : Given you N Integers原创 2017-04-04 13:46:49 · 449 阅读 · 0 评论 -
dp 树状数组 逆序元组
题目暂时不方便放出来很容易想到用动态规划的方式来解决在这道题目,我们用dp[i][j][t]来表示在前i个队伍里,以t结尾的j元祖有多少个这样的话转移就是dp[i][j][t] = sum(dp[i-1][j-1][m])其中m > t但这样的话空间复杂度是4*10^10,我们发现dp[i]只与dp[i-1]有关,因此可以重复利用,所以 省掉一维只用dp[j][t]来表示就好了,这样的原创 2017-04-04 09:56:46 · 351 阅读 · 0 评论 -
2017西安交大ACM小学期 神器插座 KMP匹配
神奇插座发布时间: 2017年7月3日 11:27 最后更新: 2017年7月5日 13:46 时间限制: 500ms 内存限制: 128M描述AA所在的国家有一项神奇的发明:插座。这里的插座不仅有两孔、三孔,而是有多种形态,下面用不同的小写字母表示不同的插座。插线板可以看做一排插座,因而下面用小写字母组成的字符串表示插线板。该国家的用电器的插头也很特别原创 2017-07-10 19:28:24 · 292 阅读 · 0 评论 -
2017上海金马五校赛 丢史蒂芬妮 博弈问题
丢史蒂芬妮发布时间: 2017年7月9日 18:17 最后更新: 2017年7月9日 21:05 时间限制: 1000ms 内存限制: 128M描述有一天,空和白很无聊,决定玩盛大游戏,考虑到两个人玩,他们随便掏了一个游戏出来:在一个n*m的棋盘上,首先把史蒂芬妮·多拉放在左上角(1,1)的位置。每次一个人可以将她往下,往右,往右下丢一格。当前回合,谁不能丢原创 2017-07-09 23:04:11 · 350 阅读 · 0 评论 -
动态规划训练7 [Halloween Costumes ]
Gappu has a very busy weekend ahead of him. Because, next weekend is Halloween, and he is planning to attend as many parties as he can. Since it's Halloween, these parties are all costume parties, G原创 2017-06-22 14:05:01 · 268 阅读 · 0 评论 -
动态规划训练9 [Brackets POJ - 2955 ]
Brackets POJ - 2955 再明显不过的区间DP的题目了,要求求出给出符号式中最大匹配的括号数。考虑区间[l,r],如果str[l]与str[r]匹配了,那么转移方程为dp[l][r] = max(dp[l][r],dp[l+1][r-1]+ 2);然后考虑将区间分成2部分dp[l][r] = max(dp[l][r],dp[l][k]+dp[k+1原创 2017-06-22 14:32:07 · 199 阅读 · 0 评论 -
ACM一类方程问题的求解[最短路建模] bzoj2118
在ACM生涯里已经预见两回判断这种方程是否有解、有几个解的问题了。例如:1给定非负整数a,b,c,n,请判断ax+by+cz=n是否存在(x,y,z)均为非负整数的解题目链接:http://oj.xjtuacm.com/contest/14/problem/124/再例如:2现有方程A1 * X1 + A2 * X2 + ... + An * Xn =原创 2017-07-11 19:43:54 · 440 阅读 · 0 评论 -
动态规划训练8 [E - Multiplication Puzzle POJ1651]
Multiplication Puzzle POJ - 1651 题意:在一个序列中,拿走一个数字,那么得分就是这个数字以及它相邻的两个数字,这三个数字的乘积。求最小得分。这道题乍一看感觉是区间DP,但是需要逆向思考的技巧。记dp[i][k]表示以i开头的,长度k的区间。我们考虑一个区间的时候,记录区间的两个端点分别为l,r。这个区间两侧的端点是不能原创 2017-06-22 14:29:12 · 225 阅读 · 0 评论 -
动态规划训练6 [统计单词个数]
【问题描述】给出一个长度不超过 200 的由小写英文字母组成的字母串(约定:该字母串以每行20 个字母的方式输入,且保证每行一定为 20 个)。要求将此字母串分成k 份(1,且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用。例如字符串this中可包含 this 和 is,选用this 之后就不能包含原创 2017-06-20 18:47:41 · 677 阅读 · 0 评论 -
动态规划训练5 [回文词]
【问题描述】回文词是一种对称的字符串——也就是说,一个回文词,从左到右读和从右到左读得到的结果是一样的。任意给定一个字符串,通过插入若干字符,都可以变成一个回文词。你的任务是写一个程序,求出将给定字符串变成回文词所需插入的最少字符数。比如字符串“ Ab3bd”,在插入两个字符后可以变成一个回文词(“dAb3bAd”或“ Adb3bdA”)。然而,插入两个以下的字符无法使原创 2017-06-20 18:36:41 · 880 阅读 · 0 评论 -
动态规划练习3 [砝码称重]
【问题描述】设有 1g、 2g、3g、 5g、10g、 20g的砝码各若干枚(其总重),用他们能称出的重量的种类数。【输入文件】a1 a2 a3 a4 a5 a6(表示 1g 砝码有a1 个, 2g砝码有 a2 个,…,20g 砝码有 a6个,中间有空格)。【输出文件】Total=N( N 表示用这些砝码能称出的不同重量的个数,但不包括一个砝原创 2017-06-20 17:48:51 · 2004 阅读 · 0 评论 -
动态规划练习2 [合唱队形]
N 位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K 位同学排成合唱队形。合唱队形是指这样的一种队形:设 K 位同学从左到右依次编号为1, 2…,K,他们的身高分别为 T1,T2,…, TK, 则他们的身高满足T1Ti+1>… >TK(1。你的任务是,已知所有 N 位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。原创 2017-06-20 17:34:20 · 1455 阅读 · 0 评论 -
动态规划训练11 [String painter HDU - 2476]
String painter HDU - 2476 题意:我认为这是一道比较难的问题,自己想了很久,没有想出来怎么做,可能是因为思维僵化吧,一直在想怎么直接的由A变到B,事实上,可以有中间桥梁连接A和B,他们之间的关系可能往往没有我们想的那么简单。依最简单的思路,我们定义ans[i]代表区间[1...i]处,A直接变到B所需的最少次数。那么状态转原创 2017-06-22 15:44:01 · 313 阅读 · 0 评论 -
动态规划训练12 [G - You Are the One HDU - 4283 ]
2012天津区域赛的一道题目,题目链接如下You Are the One HDU - 4283 这道题目要说思想的话其实并不是很难,但是我却没做出来。关键就在于读题读不懂(How Vegetable I am!),到最后搜了别人的题解才明白这道题想要说什么:题目大意就是说给定一个有序序列和一个栈,对于队伍前头的一个人,有两个操作,一个是直接迈向舞台,另一个操原创 2017-06-22 18:51:03 · 251 阅读 · 0 评论 -
动态规划训练13 [Catch That Cow poj3278]
Catch That Cow POJ - 3278 这道题我看大家用的方法都是bfs搜索,为什么在我看来这就是一个动态规划的题目啊啊啊啊啊啊啊dp[x]表示从N出发到x所需要的最小时间那么得到如下转移方程如果x 而x > N时候,可以通过2种方式来转移(1)走路转移 dp[x] = dp[x-1] + 1(2)跳跃加走路转移当x为偶数的时候d原创 2017-06-22 23:02:23 · 421 阅读 · 1 评论 -
北方大学 ACM 多校训练赛 第十五场 数字游戏
本题的意思是,给你1/2,1/2,1,2,4……2^(k-1) ,让你在左边的数列中添加+号或者-号,使得最终的答案为n即可。思路:我们知道上面这些数直接如果全部都填+号的话,那么最终得到的数为2^k,而如果我们把其中的一个数如2^(j)前面的+号改成-号的话,那么结果将减少2*2^(j),我们从这个角度出发,考虑r = 2^(k) - n,也就是需要把和为r/2的数前面的+变成-。那么我原创 2017-06-11 17:38:05 · 243 阅读 · 0 评论 -
北方大学 ACM 多校训练赛 第十五场 买花
显然是一个比较简单的离线查询问题。本质上是对区间求集合的问题,按照区间右端点从小到大对区间进行排序,然后用一个指针curr表示当前正在考虑区间的最右侧位置,针对排好序区间[tarl,tarr],先查看curr是否到达tarr,如果没到的话,就依次增加curr,并在增加的过程中,不断维护每种花出现的最晚位置,并把这朵花的魅力值更新进树状数组的相应位置(出现的最晚位置)处。然后就非常的简单了,要求原创 2017-06-11 17:45:05 · 239 阅读 · 0 评论 -
北方大学 ACM 多校训练赛 第十五场 欢度6.18
把式子变成a[i]+1 = p(a[i-1]+1)+q[a[i-2]+1],矩阵快速幂搞定。复杂度o(logn)#include #include using namespace std; #define int long longint x,y,p,q,n;const int MOD = 1000000007;int fast_mod(int n) // 求 (t^原创 2017-06-11 17:55:25 · 196 阅读 · 0 评论 -
2017西安交大ACM小学期 文本查找[AC自动机]
文本查找发布时间: 2017年7月5日 00:10 最后更新: 2017年7月5日 13:47 时间限制: 1500ms 内存限制: 128M描述给定m种两两不同的关键词,并给定一段文本,问这段文本中有几种关键词出现(一种关键词出现多次只算一次)。输入多组输入数据。每组数据第一行一个正整数m,表示有m个关键词。接下来m行每行一原创 2017-07-10 19:31:53 · 308 阅读 · 0 评论 -
动态规划练习1 [导弹拦截]
【问题描述】某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于 30000 的正整数),计算这套系统最多能拦截多原创 2017-06-20 17:33:45 · 564 阅读 · 0 评论 -
2017西安交大ACM小学期 敏感词汇[AC自动机]
敏感词汇发布时间: 2017年7月5日 00:23 最后更新: 2017年7月6日 14:40 时间限制: 1500ms 内存限制: 128M描述我们知道,在进行聊天时,有些词汇是敏感词汇,含有敏感词汇的内容是不允许被发送的。现在给定m个敏感词汇,并给定一段文本,请将所有敏感词汇都用星号替换掉。输入包含多组数据。每组数据第一行一个原创 2017-07-10 19:55:28 · 325 阅读 · 0 评论 -
2017西安交大ACM小学期 美妙音乐[差分KMP匹配]
美妙音乐发布时间: 2017年7月3日 13:14 最后更新: 2017年7月5日 13:47 时间限制: 500ms 内存限制: 128M描述一段音乐是由若干个音符组成的,音乐中的某段音符称为旋律。给定一首音乐,问某个旋律出现了多少次。注意:(1)音乐中旋律是可以升调或降调的:例如 4 5 6和5 6 7是一个旋律;(2)旋律不能重叠。原创 2017-07-10 19:46:32 · 259 阅读 · 0 评论 -
2017西安交大ACM小学期 有趣异或[Trie树]
有趣异或发布时间: 2017年7月4日 23:59 最后更新: 2017年7月5日 14:56 时间限制: 1500ms 内存限制: 512M描述给定n个非负整数,保证这些数两两不相同。现给定x,请从中选2个不同的数a,b,使得a^b^x最大。输入包含多组测试数据。每组测试数据第一行有1个正整数和1个非负整数,分别为n和x。接原创 2017-07-10 19:39:04 · 303 阅读 · 0 评论