题解
CleverLarry
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #674 F. Number of Subsequences——题解
题目传送门此题一定要注意要先将所有?变为abc后再求子序列,因此不在abc这一子序列中的?也要考虑变为a、b或c。(本人只考虑在子序列中的?,所以卡了好久。。。)思路:定义dpi,j,k为到第i个位置时,子序列已有了第j个字母(a对应1,b对应2,c对应3),子序列使用了k个问号的情况的数量。详细递归方式见代码。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;ll mod1=1e9+7;l原创 2020-09-30 10:54:23 · 201 阅读 · 0 评论 -
洛谷P4161 [SCOI2009]游戏——题解
题目传送门 题目大意: 不知道怎么简要描述,看原题面吧。思考过程: 我们首先来考虑如何求一个给定排列的排数,容易发现它就为这一排列中所有循环节(转着转着又能转回去的子串)长度的LCM(最小公倍数)。继续分析我们又能想到,几个数的LCM等于在他们之中出现过的所有质数的最高次幂乘积。然后题目就转化成了:对于一些质数的次幂之和如果小于N,排数就为这些质数的次幂之积,求这个积有多少可能的取值...原创 2018-04-27 11:28:39 · 204 阅读 · 0 评论 -
洛谷P4036 [JSOI2008]火星人——题解
题目传送门 题目大意: 写一个数据结构,需要支持三种操作: 1.单点修改一个字符 2.单点插入一个字符 3.询问两个后缀的LCQ思考过程: 一开始想到的是后缀数组,但是后缀数组似乎不支持插入的操作。那么能够在小于log的时间内求出LCQ的,也只有hash的O(1)O(1)O(1)了。而题目又需要提出一段区间来进行操作,所以很容易想到splay。没错,hash+splay就能够完...原创 2018-05-09 19:15:02 · 283 阅读 · 0 评论 -
洛谷P2506 [SCOI2008]劣质编码——题解
题目传送门 题目大意: 给定n个01字符串,试问能由这些字符串以三种方式构成的最短字符串长度为多少。思考过程&具体做法: 神DP,看题解才会的。 首先我们考虑二维的情况(也就是只要求能有两种构成方式),令dp[i][j]表示模式串为i,匹配串当前匹配到的位置为j的最短长度。我们将这种状态推广到三维,令dp[i][j][k]表示模式串为i,较长的匹配串匹配到j,较短的匹配串匹...原创 2018-05-09 18:37:20 · 254 阅读 · 0 评论 -
洛谷P2475 [SCOI2008]斜堆——题解
题目传送门 题目大意: 看题面吧。思考过程&具体做法: 当前插入的是极左没有右儿子的节点,也就是一直往左走直至一个没有右儿子的点停止,然后删掉他交换父节点的左右儿子,这样做是符合的,但为什么最优不会证2333。代码:#include <bits/stdc++.h>using namespace std;const int maxn=60;i...原创 2018-05-03 10:58:20 · 136 阅读 · 0 评论 -
洛谷P4026 [SHOI2008]循环的债务——题解
题目传送门 题目大意: 三人互相交换纸币使每个人都达到最终结果,试问交换纸币的最少张数。思考过程&具体做法: 比较明显的dp,因为一共只有6种币值,考虑枚举币值,dp[i][a][b]表示枚举到第i种纸币,a的钱数为a,b的钱数为b(c的钱数为总数-a-b)的最小交换数,转移比较简单看代码吧。(我用了滚动数组写这个dp)代码:#include <bits/s...原创 2018-05-03 10:54:23 · 254 阅读 · 0 评论 -
洛谷P4201 [NOI2008]设计路线——题解
题目传送门 题目大意: 给定一棵树,你可以在上面指定一些不相交的链,试问从每个节点到根经过的非链边最多的最小值是多少。思考过程&具体做法: 看别人的题解艰难地写出来的。 首先impossible很好判断,图不联通直接输出就行了。 图联通的话, 我们对于每一个点,在所有向下的路径中选择最长的两条,然后把这两条全部变成铁路。那么假设f(x)为有x节点的树的最大可能答案...原创 2018-05-03 10:48:49 · 225 阅读 · 0 评论 -
洛谷P2470 [SCOI2007]压缩——题解
题目传送门思考过程&具体做法: 明显的dp题,考虑如何表示状态。首先自然想到用dp[i][j]表示i到j这一段压缩后的最短长度,后面还要加一维 bool t 来表示这段中是否有M。如何转移请见代码注释。代码:#include <bits/stdc++.h>using namespace std;int l;int f[60][60][2],ma...原创 2018-05-02 21:49:50 · 196 阅读 · 0 评论 -
洛谷P2472 [SCOI2007]蜥蜴——题解
题目传送门 题目大意: 有一张n*m的网格地图(习惯用n*m了),有些地方有柱子,柱子有高度,有的柱子上有蜥蜴,蜥蜴能跳到与它的欧氏距离小于等于d的柱子上(与边界的距离小于等于0可以直接跳出地图),并且起跳的柱子的高度会减1,高度减为0的柱子不能再跳到上面去。问怎样安排能使尽量多的蜥蜴跳出地图,输出最少的不能跳出去的蜥蜴个数。思考过程: 题目中有一个干扰条件:“任何时刻不能有两只蜥蜴...原创 2018-04-20 20:07:02 · 212 阅读 · 1 评论 -
洛谷P4163 [SCOI2007]排列——题解
题目传送门 题目大意: 题面说的很简洁了。思考过程&具体做法: 排列总数为15∗10!=54432000<1∗10815∗10!=54432000<1∗10815*10!=54432000原创 2018-04-24 16:08:50 · 219 阅读 · 0 评论 -
洛谷P1450 [HAOI2008]硬币购物——题解
题目传送门 题目大意: 题面上说的很简洁了。思考过程&具体做法: 如果没有硬币个数的限制,那么这个题就是一个裸的完全背包,现在我们来思考如何消除限制。 从最简单的情况入手,如果只有一种硬币有个数限制,那么答案就是dp[总钱数]-dp[总钱数-c*(d+1)](c,d的含义和题目中一样),也就是总的情况数减去首先打破限制,再任意取的情况数。 那么4个硬币有限制该怎么处理就很...原创 2018-04-24 16:03:37 · 206 阅读 · 0 评论 -
洛谷P4049 [JSOI2007]合金——题解
题目传送门 题目大意: 看题面吧。思考过程: 首先很显然地一点,第三维是可以忽略的,因为c=1-a-b。 我们从最简单的情况开始考虑,如果只有两种备选合金,能配出的合金就在这两种合金连线的线段上,三种就在三种合金形成的三角形中,以此类推,n种就在这n种合金围成的凸包上。具体做法: floyd求最小环,具体的是如果一个点在线段ij的一边,dis[i][j]=1,否则为inf...原创 2018-05-09 19:28:11 · 178 阅读 · 0 评论 -
洛谷P2592 [ZJOI2008]生日聚会——题解
题目传送门 题目大意: n男m女围成一个圈,试求满足对于任意连续的一段,男女之差不超过k的方案数。思考过程&具体做法: 这应该是个比较明显的DP题,那么我们来考虑状态该如何定义: 首先我们可以发现,男女的人数和总人数是可以相互推导的,所以男女及总人数这三个状态我们用二维就能表示 然后我们看到题目让我们求的是任意一段男女之差不超过k的,我们不妨枚举男比女最多多多少和女比男最...原创 2018-04-27 11:16:33 · 221 阅读 · 0 评论 -
洛谷P2680 运输计划——题解
题目传送门题目大意:有一颗n个节点的树和m条路径,你可以将树上任一条边的长度变为0,求所有路径中最长的一条的最小值。思考过程:这是典型的求最大值最小可以为多少的问题,我们考虑二分答案。然后我们考虑如何检验当前答案是否可行。显然,长度小于当前答案的路径都是可行的,问题转化为如何判断长度大于当前答案的路径是否可行。因为我们要删掉一条边使得这些路径长度都变小,所以我们肯定要删掉这些路径的交,...原创 2018-09-25 23:22:30 · 233 阅读 · 0 评论 -
洛谷P3620 [APIO/CTSC 2007]数据备份——题解
题目传送门思考过程&具体做法: 显然,我们选作答案的每一个点对中的点都是相邻的,我们将这些数两两作差,于是问题变成了在n-1个数中选出k个不相邻的数,和最小为多少。 首先考虑初步贪心,即每次都取最小的数,但显然这样是错误的。 我们要思考怎么贪心才是对的。 我们发现,可以在取完最小的数后,删掉他的前一个数和后一个数,插入前一个数和后一个数的和减去当前数的差,这样如果取了插入的...原创 2018-05-16 22:08:52 · 327 阅读 · 0 评论 -
洛谷P2323 [HNOI2006]公路修建问题——题解
题目传送门思考过程&具体做法: 首先将所有边的价格从小到大排序,然后二分答案,并查集维护是否连通来检验即可。代码:#include <bits/stdc++.h>using namespace std;const int maxn=2e4+1000;struct stu{ int x,y,type,cost,id;}len[maxn...原创 2018-05-16 21:59:29 · 344 阅读 · 0 评论 -
洛谷P3459 [POI2007]MEG-Megalopolis——题解
题目传送门 题目大意: 题目翻译有毒,我也表述不清楚,可以看第一篇题解弄清题意。思考过程&具体做法: 我是用树链剖分硬搞的。具体的是把每个点父亲连向自己的那条边作为自己的权值,土路为1,公路为0,这样除了1外一开始所有点点权都是1,树链剖分维护点权即可。代码:#include <bits/stdc++.h>using namespace std;...原创 2018-05-16 21:55:37 · 196 阅读 · 0 评论 -
洛谷P4298 [CTSC2008]祭祀——题解
题目传送门 题目大意: 从一个图中选出最大的任意一点都无法到达其他点的点集。思考过程&具体做法: 我们首先假设所有点都选了,现在问题转化为了删除最少的点。 我们从s向所有点连边,再从所有点的另一点向t连边,如果a能够达到b,我们从a向b的另一点连边,最终情况就是使得这个图从s无法到达t,即要求最小割。又因为这是一个只有两层的分层图,没必要写网络流,二分图匹配就可以解决了。...原创 2018-05-16 21:45:10 · 411 阅读 · 0 评论 -
洛谷P3627 [APIO2009]抢掠计划——题解
题目传送门 题目大意: 看题面吧。思考过程&具体做法: 先缩点,然后从市中心所在的新点开始做dp,最后对有酒吧的新点统计答案。代码:#include <bits/stdc++.h>using namespace std;const int maxn=5e5+1000;struct stu{ int to,next;}road[m...原创 2018-05-16 21:37:05 · 364 阅读 · 0 评论 -
洛谷P2474 [SCOI2008]天平——题解
题目传送门 题目大意: 看题面吧。思考过程&具体做法: 我也是看别人的题解才会做的。 这个题真的很难往DP方面去想,但是想到了就特别简单,用dn[i][j]表示i比j大的最小值,dx[i][j]表示i比j大的最大值(若j比i大,则这个值为负数),转移请看代码,挺容易理解的,主要这个状态真的想不到。代码:#include <bits/stdc++.h&g...原创 2018-05-08 20:03:50 · 215 阅读 · 0 评论 -
洛谷P4467 [SCOI2007]k短路——题解
原创 2018-05-08 19:47:30 · 714 阅读 · 0 评论 -
洛谷P3258 [JLOI2014]松鼠的新家——题解
题目传送门 题目大意: 给出一个在树上移动的序列,求出每个点被经过的次数。思考过程: 维护两个点之间的链的信息很明显我们需要树剖,但是树剖无法维护链上每个节点的信息,所以我们需要借助差分数组。具体做法: 1.树剖 2.对于序列中相邻的两个点,像普通树剖求答案那样往上跳到LCA,过程中将两个节点的差分数组起点+1,终点-1,注意重复的情况,用tag数组来记录代码:...原创 2018-05-15 14:41:42 · 166 阅读 · 0 评论 -
洛谷P2587 [ZJOI2008]泡泡堂——题解
题目传送门 题目大意: 不知道怎么能够表述的更简洁一些。思考过程&具体做法: 类比田忌赛马,策略是: 1.将我方最菜的和敌方最菜的比较,如果我方的比较厉害就干他 2.将我方最强的和地方最强的比较,如果我方的比较厉害就干他 3.用我方最菜的换掉地方最强的 (上述三条按序号来优先执行,策略正确性不会证2333)代码:#include <bits/stdc...原创 2018-04-24 15:55:39 · 151 阅读 · 0 评论 -
洛谷P2215 [HAOI2007]上升序列——题解
题目传送门 题目大意: 询问字典序最小的长度为L的上升子序列,不存在则输出Impossible思考过程: 回忆nlognnlognnlogn的最长上升子序列求法,dp[i]表示长度为i的上升子序列的末位最小为dp[i],这里因为对于每一个元素,我们需要知道以他为开头的最长上升子序列的长度为多少,所以我们倒过来求一遍最长下降子序列就好了。(注意题目要求的是字典序最小,不是数值最小!)...原创 2018-04-24 15:50:18 · 175 阅读 · 0 评论 -
洛谷P2476 [SCOI2008]着色方案——题解
题目传送门 题目大意: 有k种颜色的油漆,每种只能涂一定次数,所有加起来刚好能涂满,相邻的不能涂相同的颜色,求方案数。思考过程: 我们发现这题的c值非常小,最大才5,于是可以用五维来暴力记录状态,再加上记录上一次涂的颜色,一共六维,可以暴力转移。具体做法: dp[t1][t2][t3][t4][t5][last]其中ti表示能涂i下的颜色有多少种,last表示上次涂的颜色,...原创 2018-04-30 15:37:46 · 202 阅读 · 0 评论 -
洛谷P2272 [ZJOI2007]最大半连通子图——题解
题目传送门 题目大意: 题面说得很清楚了。思考过程: 很容易可以发现,若想使节点数最多,在同一个强连通分量内的所有点一定是同时取的,所以我们可以先将这个图缩点成为DAG,而最大半联通子图也就是这个图中最长的一条链,在DAG上求拓扑序做DP即可。具体做法: 1.tarjan求强连通分量,缩点 2.去重边求拓扑序 3.DP代码:#include <bi...原创 2018-04-30 15:30:53 · 220 阅读 · 0 评论 -
洛谷P2178 [NOI2015]品酒大会——题解
题目传送门 题目大意: 有一个长为n的字符串,每一个字符有一个权值,称相同的两个长度为r的子串的开头是“1相似”、“2相似”、⋯⋯\cdots、“(r-1)相似”、“r相似”的,试问有多少k相似的字符(1<=k<=n)以及k相似的两个字符的权值积最大为多少。思考过程: 我是在洛谷的后缀数组分类里找到这道题的,那么就先码一遍后缀数组的模板2333。 看过题目之后,我们发现...原创 2018-04-19 15:36:43 · 213 阅读 · 0 评论 -
洛谷P2511 [HAOI2008]木棍分割——题解
题目传送门 题目大意: 有n根木棍通过n-1个连接处连在一起,你要通过砍断连接处将它分为m+1个部分,试问这m+1个部分中最长的最短是多少和满足这样的有多少种切法。思考过程&&具体做法: 第一问二分答案没什么好说的,答案记为ans。 第二问我们设dp[i][j]为前i段分为j个部分的方案数,那么就有∑i−1k=book[i]f[k][j−1]∑k=book[i]i−...原创 2018-04-30 11:45:36 · 244 阅读 · 0 评论 -
洛谷P2331 [SCOI2005]最大子矩阵——题解
题目传送门 题目大意: 题面说得很清楚了,注意一点:空矩阵也算矩阵。思考过程&&具体做法: 仔细观察数据范围我们可以发现,m为1或2。 m=1时就不说了,普及组难度的DP。 我们来考虑m=2时的情况:回想m=1时,我们是用0或1来表示当前这位是选还是不选,那么这种方法能否推广到m=2时呢?m=2时有四种情况,左右都不选、只选左边、只选右边和左右都选,但左右都选又分...原创 2018-04-30 11:17:43 · 184 阅读 · 0 评论 -
洛谷P2508 [HAOI2008]圆上的整点——题解
题目传送门 题目大意: 题面说得很简单了思考过程: 这题让我彻底蒙圈了。具体做法: 用到的知识太过深奥,我肯定讲不清楚,请看这个视频代码:#include <bits/stdc++.h>using namespace std;int main(){ long long n; scanf("%lld",&n); ...原创 2018-04-22 20:52:02 · 227 阅读 · 0 评论 -
洛谷P4208 [JSOI2008]最小生成树计数——题解
题目传送门 题目大意:如题,求一个图中最小生成树的个数思考过程: 我们考虑用kruskal求最小生成树的过程,首先将所有边按权值从小到大排序,顺着往后扫,如果起点和终点所处的并查集不一样,就将他们合并,若最后所选边数等于n−1n−1n-1,则存在最小生成树。 我们将这个过程变换一下,就可以用来求解这道题了。 我们可以在选边时顺便统计每个不同权值的边各用了多少条,然后求出在所有该权值...原创 2018-04-18 16:12:35 · 570 阅读 · 1 评论 -
洛谷P2607 [ZJOI2008]骑士——题解
题目传送门 题目大意: 每个骑士都有自己的战斗力且不能和另一个特定的骑士同时出征,试问出征的骑士最大总战斗力是多少(总战斗力等于所有出征的骑士的战斗力之和)思考过程: 做过洛谷P1352 没有上司的舞会的同学肯定会觉得这个题和它很想,只不过那个题是n个点n-1条边的树,这个题是n个点n条边的基环树,多了一个环而已。我们要思考怎么转化。我们首先找到环上的一条边,断开这条边并记录左右端点...原创 2018-04-22 12:47:16 · 280 阅读 · 1 评论 -
洛谷P3194 [HNOI2008]水平可见直线——题解
题目传送门 题目大意:有给定斜率和截距的n条直线,试问从y轴正无穷处向下看能看到哪些直线思考过程: 题目的数据范围最大到了5∗1055∗1055*10^5,我们肯定需要发现一些直线间遮挡的性质,才能解出此题。 我们发现,若有三条直线,假设斜率分别为最大、次大和次次大,那么如果最大的与次大的直线交点在次大的和次次大的直线交点左边,次大的直线就会被遮住。 如图: 具体做法: ...原创 2018-04-18 14:50:42 · 351 阅读 · 0 评论 -
洛谷P2325 [SCOI2005]王室联邦——题解
题目传送门 题目大意: 题面说得很清楚了。思考过程: 其实这个题很奇怪,既没要求最多可能分多少个省,又没要求城市数最多的省的城市数最小是多少,所以有很多种做法。具体做法: 从1开始做dfs,对所有点维护一个栈,第一次到这个点则让他入栈,回溯时如果比第一次到时栈中元素多了n个或以上,则将这一部分弹栈,划分成一个省,省会为当前回溯的城市,最后未划分的城市和最后被划分一个省合为一...原创 2018-04-30 15:49:04 · 159 阅读 · 0 评论 -
洛谷P4289 [HAOI2008]移动玩具——题解
题目传送门 题目大意: 有一个4*4的方格,有些格子放有玩具,每次可以将任意两个格子互换,问从起始状态到目标状态最少需要多少步。思考过程&具体做法: 直接跑bfs,对每个图状压记录状态判重就行了。代码:#include <bits/stdc++.h>using namespace std;struct stu{ int step; ...原创 2018-04-30 15:52:55 · 410 阅读 · 0 评论 -
洛谷P4290 [HAOI2008]玩具取名——题解
题目传送门 题目大意: 看题面吧。思考过程&具体做法: 我们用1,2,3,4分别表示W,I,N,G四个字母,用布尔数组dp[i][j][k]表示从i到j是否能用k来表示,w[i][1],w[i][2],w[i][3]表示读入的数据中w[i][1]w[i][2]可以用w[i][3]来表示,转移方程为:dp[i][j][w[i][3]]=dp[i][t][w[i][1]]&...原创 2018-04-30 16:29:46 · 203 阅读 · 0 评论 -
洛谷P3198 [HNOI2008]遥远的行星——题解
题目传送门 题目大意: 题面说的很清楚了思考过程&具体做法: 题面中有一句非常关键的话:“只要结果的相对误差不超过5%即可”,这样我们就可以乱搞一些东西了。 观察数据范围发现,当分母的差距很大时,分子因为有a的存在的差距并不大,那么当n较大时,我们可以直接将分子设成中位数,分母用前缀和来求,就能解决问题了。(当n比较小的时候还是直接n2n2n^2暴力求就好)代码:...原创 2018-04-24 15:38:36 · 219 阅读 · 0 评论 -
洛谷P3196 [HNOI2008]神奇的国度——题解
题目传送门 题目大意: 给定一个全部由三角形构成的图,给每个点染色,每个点和相邻点的颜色不能相同,问最少要使用多少种颜色。思考过程&具体做法: 请参考弦图与区间图——cdq代码:#include <bits/stdc++.h>using namespace std;const int maxn=1e4+100,maxm=1e6+100;st...原创 2018-04-24 15:30:26 · 522 阅读 · 0 评论 -
洛谷P2502 [HAOI2006]旅行——题解
题目传送门 题目大意: 有n个点m条边,每条边有权值,试问两个点之间的所有路径中,权值最大和权值最小的比最小是多少。思考过程: 题目询问的是权值最大和权值最小的比值,直接求比值很难拿下手,我们不妨先固定权值最小的边,再来枚举权值最大的边,这样只要使权值最大的边的权值尽量小就可以了。想到这里,算法就呼之欲出了。类似于最小生成树(克鲁斯卡尔),我们将所有的边按权值从小到大排序,从1到m枚...原创 2018-04-24 15:23:50 · 297 阅读 · 0 评论 -
洛谷P4291 [HAOI2008]排名系统——题解
题目传送门 题目大意: 看题面吧。具体做法: hash+splay,数据结构题得自己看代码。代码:#include <bits/stdc++.h>using namespace std;const int maxn=1e6+10,mod=999983,inf=2147483647;int num[maxn],size[maxn],c[maxn][2...原创 2018-05-08 21:01:13 · 182 阅读 · 0 评论