
ACM题解
KXL5180
这个作者很懒,什么都没留下…
展开
-
点分治学习模板及一些例题
点分治这里没有动态点分治。。点分治是解决树上问题的一类算法,很多复杂度能从暴力的O(n2)O(n^2)O(n2)降低到O(nlogn)O(nlogn)O(nlogn).具体做法是就是求一个树的重心,树的重心的性质,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。就是说子树的大小可以lognlognlogn的降低,这样复杂度就降下来了。如...原创 2020-03-25 12:13:09 · 319 阅读 · 2 评论 -
P4103 [HEOI2014]大工程
题目题意:给出一个树,给出k个关键点,这k个点每一对点的路径和,最小值以及最大值。做法:首先我们看见多组询问并且k和n同阶,应该就知道是虚树的处理了。首先考虑怎么树上dp。设dp[u]dp[u]dp[u]表示当前uuu为根的子树中关键点之间的和,接下来按照每一个子树的遍历顺序可以得到总的代价可以通过如下关系得到:ans+=(dp[u]+sz[u]∗dis)∗sz[v]+dp[v]∗sz[u...原创 2020-03-21 14:23:34 · 196 阅读 · 0 评论 -
The 2019 ICPC Asia-East Continent Final(部分题解)
这是今年我的最后一场,顺便写一下游记,第一场因为发挥打铁,心里很郁闷,加之最近学业加(我们学院都是硬件专业) 。那天考了四级(不能过)就和另外一个队一起坐高铁来到西安,到的时候时间还有还可以打一打热身赛,不得不说志愿者服务真好。第一天热身赛,看了一眼,旁边都是比我们好的学校,直接签了A题,C++,JAVA都试了一下还不错,Clion好用,B题刚刚开始想对了,但不过被自己干掉了,然后试了一试机器,...原创 2020-01-12 20:30:37 · 3383 阅读 · 7 评论 -
Codeforces Round #610 (Div. 2) 简要题解
http://codeforces.com/contest/1282坚持下去谁也不知道结果是什么,但不坚持我肯定会后悔的。这场比赛自闭了,对我极其不友好,读不懂,读懂了又做不来。A.Temporarily unavailable题意:给一个区间[a,b],以及一个基站c,以及信号覆盖范围半径r,一个人以单位速度从a到b运动,问过程中有多少时间不再基站信号范围内。做法:直接模拟即可,求出信...原创 2019-12-25 15:02:56 · 420 阅读 · 0 评论 -
gym-102452 香港区域赛部分题解
gym-102452 香港区域赛部分题解本人水平有限只会这几道题B - Binary Tree题意:给出一颗二叉树,Alice和Bob轮流删除子树,子树要求是完全二叉树。在这里想了很久,什么模拟都来了,最后想了一下,好像退了几个样例找到了结论。根据n的奇偶判答案#include<bits/stdc++.h> using namespace std;typedef lo...原创 2019-12-19 14:28:55 · 1125 阅读 · 0 评论 -
Codeforces Round #594 (Div. 2) 简要题解
http://codeforces.com/contest/1248A. Integer Points做法:统计两条垂直线的截距的奇偶性就行了#include "bits/stdc++.h" using namespace std;typedef long long ll;const int maxn = 100000 + 10; int main() { i...原创 2019-10-31 22:05:21 · 280 阅读 · 0 评论 -
UVA-227-Puzzle
本小白最近刚刚接触ACM,正在学习中(受虐中),希望各位指出错误。A children’s puzzle that was popular 30 years ago consisted of a 5×5 frame which contained 24 smallsquares of equal size. A unique letter of the alphabet was printed...原创 2018-05-17 22:13:40 · 255 阅读 · 0 评论 -
UVA-232-Crossword Answers
题目连接:https://vjudge.net/problem/UVA-232题意:输入一个r行c列的网格,以0输入结束,黑格用‘*’表示,每个白格有一个字母。如果一个白格的左边相邻位置上或者上边相邻位置没有白格,则把他作为起始格。首先,把所有的起始格子,从左到右,从上到下,以1.2.3编号。最后输出所有横向单词,单词第一个字母是起始格,向左延伸到边界或者黑格。在输出竖向单词,第一个字母是起始...原创 2018-05-22 16:07:21 · 352 阅读 · 0 评论 -
HDU 2066 一个人的旅行(vector存储边,spfa算法)
一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 49192Accepted Submission(s): 16330 Problem Description ...原创 2018-07-26 18:27:45 · 238 阅读 · 0 评论 -
UVA-10382经典贪心问题,区间覆盖
题目链接https://vjudge.net/problem/UVA-10382;题目大意:有一块草坪,长为l,宽度为w.在其中心线的不同位置处装有n个点状喷水装置,每个喷水装置i,都可以把以他为中心半径为r的区域湿润,给你一些喷水装置,请选择尽量少的喷水装置,把整个草坪湿润。思路:每个喷水装置就是一个圆,由于必须完全覆盖草坪,所以对于每个喷水装置只需要关注圆与草坪边缘交点,就可以了,所以...原创 2018-09-23 19:13:50 · 333 阅读 · 0 评论 -
hihocoder 1881 特殊任务
时间限制:10000ms单点时限:1000ms内存限制:256MB描述H公司一共有N名员工,编号1~N,其中CEO是1号员工。除了CEO之外,其他员工都有唯一的直接上司,所以N名员工上下级关系恰好形成了一棵树形结构。 我们知道每一名员工向H公司的代码库贡献了多少行代码。具体来说,第i名员工贡献了Ai行代码。现在有一项特殊的任务需要2名员工完成,这两名员工需要满足:1....原创 2018-12-02 20:21:43 · 182 阅读 · 0 评论 -
搜索入门题解
E题,题意为y和m要去肯德基聚餐,图中有多个kfc,他们要选的那个kfc必须到彼此的所用时间之和最小,问 最少需要多少时间(这里一格代表了11分钟),将y到每点的时间和m到每点的时间用bfs打表,打好表后扫地图,如果扫到@的话算下时间之和,更新min。y不能经过m的出发点,m也不能经过y的出发点代码:#include<iostream>#include<cstdi...原创 2019-01-22 14:11:09 · 267 阅读 · 0 评论 -
搜索入门题解2
A题意:问可以到达多少地方.'@'为起点, ' . '为路,可以到达, ' # '为墙,不能通过.思路:简单题,既可以用深搜,也可以用广搜,广搜是可以用C++里的queue,如果是C的话也可以实现其功能,其实也没有多复杂.还有一个小技巧,搜索过的地方可以用'#'标记! 代码:#include<stdio.h>#include<memory.h>#in...原创 2019-01-23 13:39:59 · 272 阅读 · 0 评论 -
Codeforces Round #540 (Div. 3) A B C D1 D2 E F1题解
先上连接http://codeforces.com/contest/1118;A Water Buying题意为叫你n升水,有两升一桶,一升一桶,分别给出价钱,叫你用最少钱的买水,题目不难,比较两种水,哪一种划算,最后如果剩了一升水,只能用一升一桶的,直接上代码///#include<bits/stdc++.h>#include<stdio.h>#incl...原创 2019-03-01 16:17:15 · 187 阅读 · 0 评论 -
zoj 4089 Little Sub and Isomorphism Sequences
本题的意思是:给一个序列,有两种操作,第一个操作是修改某一个位置的值,第二个操作是询问整个序列中最长的两个不重合同构子串的长度。(同构的定义如题目所属,是字串中所有出现的数字,在两个子串中的出现次数都相同)这道题还是想了很久,知道了答案就是相同数字的距离的最大值可是,不知道怎么维护,刚刚开始用线段树,结果太菜写不出来,后来看了大佬的代码,忽然知道了,用set储存每个数字出现的值,然后用mult...原创 2019-02-26 20:17:53 · 227 阅读 · 0 评论 -
扫描线,线段树,HDU 1542 HDU 4419 HDU 1255 HDU 1828
我是看这个博客看懂的https://www.cnblogs.com/whywhy/p/4214353.html;扫描线就是线段树;先看看最简单的应用(下面我觉得讲得不好,如果不想看直接看下面的注意或者模板吧)计算图示图形的面积,我们可以上下扫描,也可以左右扫描,图示分成的三部分就是,左右扫描,把他每一个矩形的边都记录下来,并标记是左右边或者上下边关系。左右扫描的时候,线段树维护...原创 2019-03-03 20:24:16 · 232 阅读 · 0 评论 -
HDU2222 AC自动机静态模板
本蒟蒻第一次做AC自动机好慌哦;http://acm.hdu.edu.cn/showproblem.php?pid=2222题目的意思不多说了,就是求目标串中有几个模式串。虽然很简单,但不过我还是做了很久。关于AC自动机,有静态和动态模板两种,静态好像效率比较高,速度也较快(但为什么这道题动态快一点呢),动态好像内存需求有点大,但不过都是基于字典树,还是比较好写的。我觉得静态的比较好写...原创 2019-03-03 20:39:15 · 185 阅读 · 0 评论 -
Codeforces Round #544 (Div. 3) 全部题解
这次div3 虽然打得不是很好,但不过不是很难,都是很基础。http://codeforces.com/contest/1133A. Middle of the Contest题意:给你两个时间,要求你输出两个时间的中点,这道题最简单的办法就是,吧时间全部转换为分,然后再转换为题目要求的表达,下面的代码没有用这种方法,写得有点臃肿。#include<bits/stdc++....原创 2019-03-09 19:19:10 · 261 阅读 · 0 评论 -
Codeforces Round #546 (Div. 2) 全部题解
A. Nastya Is Reading a Book这次div2 感觉题还可以。题意给出一个 n,表示一本书有n章,然后给出每一章的起始页,和结束页,然后给出一个已读页数,问还有多少章没有读。直接写就可以了,对每一章的起始页进行标记就行了,再看看样列不难的。#include<bits/stdc++.h>using namespace std;typedef l...原创 2019-03-14 19:51:45 · 246 阅读 · 0 评论 -
Codeforces Round #545 (Div. 2)A B C D前四题题解
太垃圾了,只做得来,前四题,比赛时打得更菜A. Sushi for Two本场比赛最良心的题题意:给你一串1和2组成的数字,要求你求一个最大串的长度,这个最大串必须是1和2的数量相等,并且只能一边是1一边是2,既1和2不能交叉。做法直接把1和2 的数量压缩了,然后直接遍历找到最大值#include<bits/stdc++.h>using namespace std;...原创 2019-03-11 19:34:08 · 164 阅读 · 0 评论 -
HDU 2296 Ring AC自动机加上字符串dp
http://acm.hdu.edu.cn/showproblem.php?pid=2296题意:构造一个长度为n的字符串,价值最大。看见网上的大佬都说很简单,但不过我还是错了24次,最后看了博客还是不知道,然后一部分的按着博客的改,最后还是错了,隔了很久发现AC自动机写错了,最后改了也不对,第二天重新写了几发就对了。做法,利用AC自动机可以记录字符串匹配的状态的一个路径的思想,构建一...原创 2019-03-11 20:23:44 · 214 阅读 · 0 评论 -
zoj 3201 Tree of Tree(树形dp)
给一棵节点带权的树,找到一个有k个节点的子树,求这个子树的最大权值,这个子树不一定吧全部结点取完,但不过一定是相连的也可能是我接触的子树的概念不对吧、、、?dp[u][j]=max(dp[u][j],dp[u][j-l]+dp[v][l]);这个转移方程就是背包只不过是树上背包,但不过注意l的取值,因为为子树所以,当前结点一定要取到,l应该小于j///#include<bi...原创 2019-03-29 15:59:08 · 190 阅读 · 0 评论 -
poj3659 Cell Phone Network(树形dp)
树的最小支配集;给一颗树,每个节点可以覆盖和他相连的所有节点,问用最少的点把所有的点覆盖完。比poj 1463难,关键是思考要全面dp[u][0]表示u的子树及以下的结点全部被覆盖,但u被自己覆盖;dp[u][2]表示u的子树及以下的结点全部被覆盖,但u被自己的父亲结点覆盖。dp[u][1]表示u的子树及以下的结点全部被覆盖,但u被自己的儿子结点覆盖。dp[u][0]+=m...原创 2019-03-29 16:19:15 · 198 阅读 · 0 评论 -
HDU 2196 Computer (树的直径)
给出一棵树,求离每个节点最远的点的距离首先,树的直径有一个性质,就是树上的点到树的直径的两个端点中有一个一定是距离那个点最远的;这样这道题就秒了。同时这道题也是经典的树形dp题 后来补上吧//#include<bits/stdc++.h>#include<iostream>#include<algorithm>#include<st...原创 2019-03-29 16:25:33 · 202 阅读 · 0 评论 -
Codeforces Round #547 (Div. 3) 全部题解
http://codeforces.com/contest/1141这次div3没打,下来做了一下也不是挺难的;A. Game 23题意:给出两个数n和m,问n几步可以变到m,其中只可以乘2或者乘3解法:直接dfs#include<algorithm>#include<stdio.h>#include<string.h>#includ...原创 2019-03-29 17:01:37 · 161 阅读 · 0 评论 -
STL与复杂度分析
A - Conturbatio题意中文不说了,就是考前缀和;不懂再来问我;单组时间复杂度 O(T*n);#include<bits/stdc++.h>using namespace std;typedef long long ll;#define cppiofast ios::sync_with_stdio(false),cin.tie(0),cout.tie...原创 2019-03-29 18:47:11 · 597 阅读 · 0 评论 -
HDU 3506(区间dp) 四边形不等式优化
合并石子差不多,题意一样的。先来一道弱化版https://www.luogu.org/problemnew/show/P1880在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分.本题题意和上面一样的这次变成了猴子聚...原创 2019-03-30 16:23:58 · 300 阅读 · 0 评论 -
HDU 4632 Palindrome subsequence(区间dp)
题意:给一个字符串,求回文子序列个数,最后答案模10007区间dp简单题区间dp一般第一层枚举区间长度,第二层就是枚举区间了,第三层可能还有什么枚举短点,一般是n^3的复杂度,如果满足一定的条件可以用四边形不等式优化。这道题就二层循环就可以了。区间的遍历顺序,也有很多种写法,但不过写的前提就是,要确定递推中以前的状态都是存在的dp[j][i]=dp[j+1][i]+dp[j][...原创 2019-04-08 16:35:12 · 147 阅读 · 0 评论 -
HDU 4745 Two Rabbits(区间dp)
这道题相对来说,我觉得就有点考查读题了读题时一定要细心,大致就是要你求一个回文子序列,递推方程很简单if(a[i]==a[j])g[i][j]=max(g[i][j],g[i+1][j-1]+2);elseg[i][j]=max(g[i+1][j],g[i][j-1]);但不过他是环形的,但不过他又说了两只兔子可以同时站在一个石头上。所以遍历答案是就有同时遍历,长度为n...原创 2019-04-08 16:46:00 · 141 阅读 · 0 评论 -
HDU 2476 String painter(区间dp)
这道题就不怎么想得到了题意:给一个A串B串,每次只能将一段连续区间内的字母改成另外的同一个字母,问A变成B的最少操作次数。做法:先假设AB都不想等,g[i][j]表示i~j这个区间最少的操作.首先最基础的递推g[i][j]=g[i+1][j]+1;表示需要在上一个递推的区间上,操作一次。然后枚举短点,if(b[i]==b[k]) g[i][j]=min(g[i][j],g[i+1]...原创 2019-04-08 16:57:09 · 153 阅读 · 0 评论 -
HDU 4283 You Are the One(又是一道区间dp)
题意:给定每个diaosi的不开心值D,如果他第x个上场,他会有(x-1)*D的不开心值,因为他等了x-1个人,有一个小黑屋类似于栈,可以使用它来改变顺序,求最少的不开心值。做法:首先dp[i][j]还是表示i到j区间的最优值,然后还是三层循环,最主要的就是短点了。首先预处理所有人的等待时间的前缀和sum[i]。短点k表示区间i到j中i是第k个出去的g[i][j]=min(g[i][j...原创 2019-04-08 17:07:52 · 125 阅读 · 0 评论 -
poj2342Anniversary party(树形dp)
树形dp入门题;树形dp一般就是确定dp的维数,然后一个dfs就完了,相当于树上递推,从底层递推到上一层dp[u][0]+=max(dp[v][1],dp[v][0]); 上司u不来,下司v可以来可以不来dp[u][1]+=dp[v][0];上司u来#include<algorithm>#include<stdio.h>#include<stri...原创 2019-03-29 13:24:17 · 124 阅读 · 0 评论 -
poj1463 Strategic game(树形dp)
简单树形dp树的最小点覆盖dp[u][0]+=dp[v][1]; u-v 如果u不覆盖则v一定覆盖dp[u][1]+=min(dp[v][0],dp[v][1]);u-v 如果u覆盖则v可以覆盖或者不覆盖#include<algorithm>#include<stdio.h>#include<string.h>#include<ve...原创 2019-03-29 13:29:59 · 275 阅读 · 0 评论 -
poj2378 Tree Cutting (树形dp)
简单树形dp给定一棵无向树,节点为n(n<=10000),问删除那些节点可以使得新图中的每一个连通分支的节点数都不超过n/2首先 有dp维护以u为结点的下面的所以子树结点的个数在每一个结点,同时找到他子节点的子树的结点数最大值然后稍微判断一下就可以了;///#include<bits/stdc++.h>#include<stdio.h>#in...原创 2019-03-29 13:34:49 · 190 阅读 · 0 评论 -
西南科技大学信息学院第十三届程序设计竞赛感想
这次程序设计大赛,是我们学长和以及我们的金牌老学长出的题,这次我没有参赛(可能太菜了,,,哈哈)我作为工作人员,也是见证了大家的奋斗,大家都挺强的,也看见了我们大一同学的成长,虽然没有拿到最佳新人奖。。。其实挺高兴的。本次比赛前,我并不知道题,在比赛开始了,我也没有拿到题,就到了一个暂时还没有人到的位置上(因为时间实在太紧了,遇上了计算机学院的一些同学参加考试,我们信息学院也是万分无奈...原创 2019-04-15 21:22:35 · 578 阅读 · 0 评论 -
阿狸的打字机 Trie fail树+树状数组+dfs序
https://ac.nowcoder.com/acm/problem/17633题意就不说了,那上面说得很清楚了;这道题最暴力的办法就是,每个字符串都跑next数组,然后kmp匹配,数据很小的时候,可以这样,但不过这道题就不能了,太暴力了。所以我们还是想想Trie(AC自动机吧),这道题用到了一个很有用的结论,我觉得这个结论在字符串配中还是很重要的T串为S串的子串,当且仅当T是S...原创 2019-04-25 21:21:37 · 739 阅读 · 1 评论 -
[TJOI2013]单词 AC自动机fail树的简单应用
https://ac.nowcoder.com/acm/problem/20443https://www.luogu.org/problemnew/show/P3966题意:给出n个单词,一篇文章由这n个单词组成,问每个单词在文中的串出现的次数,其中包括自己本身。首先:每一个字符串建Trie然后,建立fail的指针,一个串要在其他串出现过,必定是另一个串的前缀的后缀形式出现的,我们在建...原创 2019-04-26 13:26:11 · 638 阅读 · 0 评论 -
P3311 [SDOI2014]数数 AC自动机+数位dp
https://www.luogu.org/problemnew/show/P3311题意都是中文的,相信大家都很清楚这道题我最开始以为是矩阵快速幂。。。但不过发现第一位不能是零,题目是小于N的,这样好像并不好弄。既然与数的位数有关就用数位dp吧,其实数位dp我也忘了怎么写。首先建立AC自动机,然后dp[pos][j]表示第pos位和自动机上j位的匹配数,然后直接枚举相加就可以了,...原创 2019-04-27 10:34:26 · 216 阅读 · 0 评论 -
Chino with Triangle ( 西工大程序设计创新实践基地春季选拔赛)树形dp
https://ac.nowcoder.com/acm/contest/553/E题意,是中文,没有什么读不懂的。做法,肯定是树形dp,如果想到,正难则反,一条链上的不可以组成三角形,这道题就不难了。首先遍历每一个结点,然后把他所有子树的结点加起来,依次相乘新加入子树的结点数,然后最求结点上面的组合,其实不难的,是可以做的#include<iostream>#inc...原创 2019-04-18 19:46:31 · 214 阅读 · 0 评论 -
Codeforces D. 0-1-Tree (树形dp)
https://codeforces.com/contest/1156/problem/D题意:给你一颗树,同时给每一条边定义一个属性0和1,定义(x,y)表示x到y,其中我们经过1边后不能经过0边,求有多少对(x,y);做法:本蒟蒻只想得到树形dp的想法,想不到大佬的并查集方法。dp[u][4],分别定义了u和他子树的四种状态。如下图dp[u][0]表示u的子树中全部是0连在一起的个...原创 2019-05-02 21:23:52 · 1179 阅读 · 0 评论