思维
文章平均质量分 73
ACM败犬
这个作者很懒,什么都没留下…
展开
-
Codeforce 1270 F. Awesome Substrings(思维 + 分块暴力)
要求的是所有的 l,r 使得:r−l=k∗(sum[r]−sum[l])r - l = k * (sum[r] - sum[l])r−l=k∗(sum[r]−sum[l])设置一个块大小 block,枚举1的个数 x,按block分块若 x≤blockx \leq blockx≤block,O(n) 枚举左端点统计所有右端点,复杂度为 O(block∗n)O(block * n)O(bl...原创 2019-12-30 11:38:50 · 594 阅读 · 0 评论 -
牛客练习赛 42 C.出题的诀窍(思维 + 实现 (卡常))
很容易想到按数值划分,计算每个数值的贡献次数。如何计算一个数值的贡献次数:一个做法是枚举这个数值第一次在哪一行出现,计算有多少种下标可以使得这个数值第一次出现在这一行,将所有的情况加起来,正确性显然。实现的话可以从后往前扫一遍,借助hash表可以做到O(n2)O(n^2)O(n2),使用unordered_map是过不去的。。。另外一种计算贡献次数的方法:用总次数 - 当前数值不出现的次数。...原创 2019-12-29 17:53:53 · 157 阅读 · 0 评论 -
牛客练习赛 56 D.小翔和泰拉瑞亚(线段树 + 思维)
枚举每一列作为事实魔法后的最低列,将所有覆盖当前枚举列的魔法都实施,然后查询最大值和最小值做差。正确性易证:这些魔法一定会使得最低列更低,若最高列也在魔法范围,最低和最高同时下降相同高度,不影响最终答案,若最高列不在魔法范围,最低列下降而最高列不会下降,答案只会增大。线段不需要重复枚举,每一条线段的作用范围是[L,R],按下标从小到大枚举最低列,每条线段的作用在枚举到L点时加进去,到R + ...原创 2019-12-28 09:56:20 · 193 阅读 · 6 评论 -
Codeforce 1271 D. Portals(思维 + 贪心)
题目大意:有 n 个待攻破的点,每个点有三个权值a,b,c,代表攻破这个点需要至少a个士兵,攻破完后你能招纳b个士兵,这个点的重要度为c,除此之外还存在一些有向边u,v 满足 u > v。攻破一个点不会损耗士兵,但你的士兵数量必须不小于这个点的a值才可以攻破。每攻破一个点你都可以派人驻守(可以派一个或多个),当一个点有人驻守时你就可以获得这个点的重要度,如果你派出一个人去驻守,那么你当前...原创 2019-12-16 13:37:43 · 348 阅读 · 0 评论 -
codeforce 1272 F. Two Bracket Sequences(dp + bfs)
题目大意:输入两个括号序列 s,t(不一定合法),你需要构造一个尽可能短的合法括号序列使得s,t 都是这个序列的子序列(子序列意味着不用连续)题解:首先答案至多不会超过400,(200对 “()” 一定满足要求)。设dp[i][j][v]表示s串已匹配 前i个括号,t串 已经匹配前j个括号,此时构造的括号序列左括号比右括号多 v 个。转移:枚举每一位放 ( 还是放 ), 放置 (:若 ...原创 2019-12-14 11:07:44 · 453 阅读 · 0 评论 -
洛谷 P3964 [TJOI2013]松鼠聚会(切比雪夫距离和曼哈顿距离转换)
这个距离的定义就是切比雪夫距离的定义。切比雪夫距离的计算式子是:d = max(|x1 - x2|,|y1 - y2|)在切比雪夫距离的定义下,一个点和周围相邻的8个点的距离相等(都为1)。如果将距离拓展为 d:以某一个点为中心,与它的切比雪夫距离为d 的点会构成一个正方形:(即与某一个点距离相同的点会构成一个矩形)曼哈顿距离的计算式子:d = |x1 - x2| + |y1 - y2...原创 2019-11-23 13:18:16 · 327 阅读 · 0 评论 -
洛谷 P3413 SAC#1 - 萌数(数位DP)
正难则反,考虑统计[l,r] 非萌串,用总数扣去这部分得到答案。非萌串在递推时只要当前数字和前两位不相同即可,但是要额外注意有前导0的情况,因为前导0是可以相等的,并且010这种也是非萌串。考虑前导0后写出了6维的傻逼DP代码:#include<bits/stdc++.h>using namespace std;const int maxn = 1e3 + 10;co...原创 2019-11-08 23:33:03 · 272 阅读 · 0 评论 -
Codeforce 1243 D. 0-1 MST(补图搜索,MST,bfs)
题意转化为求 由边权为0的边连通的图的连通块的数量cntcntcnt,答案为 cnt−1cnt - 1cnt−1用一个 set 维护 所有还没被访问过的点,然后用 bfs 算法对这个图进行遍历,每次遍历一个连通块,把遍历到的点删掉。最差每一次遍历都会使得 set 的大小减一,复杂度是均摊的O(nlogm)O(n\log m)O(nlogm)代码:#include<bits/s...原创 2019-11-07 11:51:49 · 338 阅读 · 3 评论 -
Codeforce 1251 E. Voting (贪心,思维)
题目大意: n 个人,每个人有两个属性 p,mp,mp,m,p 即 你收买这个人的价格,mmm 是你免费获得这个人的票你需要至少 m 票,问获得所有人的票至少要花多少钱。按mmm 分桶,倒过来做,计prexpre_xprex为 m≤xm \leq xm≤x 的人数。对于m=im = im=i 的人,计算一下若 prei−1pre_{i - 1}prei−1 的人都能获得,还需要买几个人...原创 2019-10-31 10:26:38 · 258 阅读 · 0 评论 -
Codeforce 1208 F. Bits And Pieces(SOS DP)
考虑从后往前做。对于 aia_iai,从高位到低位贪心考虑,对于第 ppp 位,若这一位为0,那么只要后面的数能找到2个这一位为1的即可,把后面这一位为1的数字加入到一个集合中 SpS_pSp。下一次对于第 qqq 位(q>pq > pq>p),若这一位为0,那么从SpS_pSp中再选出第 qqq 位为 1的数字加入到 SqS_qSq 中,只要超过两个即可,若不超过两...原创 2019-10-28 20:38:56 · 236 阅读 · 0 评论 -
HDU 6540 Neko and tree(树形DP,计数类DP)
题目大意:树上有 m 个关键点,选出一部分点,使得任意一对点间的距离不大于 kkk,问有多少种选法。容易想到构造状态 dp[u][dep]dp[u][dep]dp[u][dep] 表示在 uuu 结点为根结点的子树中选的结点深度不大于 depdepdep 的方案总数。这题的状态构造方法类似于 https://codeforc.es/contest/1249/problem/F不过这题是计...原创 2019-10-26 23:42:33 · 304 阅读 · 0 评论 -
Codeforce 1249 F. Maximum Weight Subset(树形DP)
题目大意:从一棵树上选一个点集,任意两点的距离不能小于等于 k,使得这个点集的权值和最大。实际上也不是很难,一开始以为树形DP做不了,后来想了一下如果能构建一个状态 dp[u][dep]dp[u][dep]dp[u][dep] 表示在 uuu 结点为根的子树中选出的点的深度不小于 depdepdep 并且满足距离大于 kkk 这个限制的最大点权和。很容易想到为什么要构建这个状态,假设以 ...原创 2019-10-26 00:44:10 · 274 阅读 · 0 评论 -
Codeforce 1248 E. Queue in the Train(模拟,思维)
题目大意:有 n 个人,按 [1,n] 的顺序坐在自己的位置上,每个人在 aia_iai的时间会醒来并且去打热水,热水一次只能一个人打,且一次需要 ppp 分钟。第 iii 个人醒来时会先观察 [1,i−1][1,i - 1][1,i−1]是否有人在排队,如果有,则第 iii 个人会坐在自己位置上等,否则这个人会去排队。如果某一时间有多个人都醒来并且要求打热水,最左边的人会先去。输出每个人打到...原创 2019-10-22 09:56:01 · 213 阅读 · 0 评论 -
Codeforce 1248 F. Catowice City(思维,dfs)
题目大意:有 n 户人,每户人家里有一个人和一只猫。每个人都认识自己家的猫,除此之外还认识一些别人家的猫,现在要选一些猫和人出来,使得猫的个数 + 人的个数 = n,并且这些选出来的猫不被选出来的人认识。首先每户人家必出一只猫或一个人,否则至少有一户人家既要出人又要出猫,这种答案不合法。那么枚举第一户人出人还是出猫,根据他们的认识关系,可以用dfs搜索出哪些人因此也必须出人或出猫。无解的情...原创 2019-10-22 08:40:17 · 237 阅读 · 0 评论 -
Codeforce 1236 E. Alice and the Unfair Game(思维,dp,并查集)
题目大意:初始有 n 个盒子 和 一个小球,A 和 B 玩一个游戏。游戏过程如下:A将小球放在某一个盒子内,然后 B 来猜小球在哪个盒子,每一次B会询问小球是否在 他猜的数字 aia_iai 中。游戏共进行 m 轮,A为了不让B赢,在每一次 B 猜的时候 A可以移动小球到相邻位置,游戏开始前和游戏结束后 A 也可以移动小球一次。设A初始将球放在 xxx 位置,游戏结束后球最后的位置在 yyy...原创 2019-10-19 10:34:08 · 279 阅读 · 0 评论 -
Codeforce 1236 D. Alice and the Doll(模拟)
题目大意:有一个n∗mn * mn∗m 的网格图,一个机器人初始在(1,1)(1,1)(1,1)位置,初始方向向右,在每一个格子,机器人只能沿当前方向走一格,或向右转向然后再沿新的方向走一格。现在 网格图 上有 kkk 个障碍物,问能否遍历所有没有障碍物的点并且每个点只走一遍。容易发现机器人的走法是固定的,每次先沿一个方向 走到底,然后向右转向,再走到底,如此循环。只需要去模拟这个过程,算出...原创 2019-10-18 17:00:17 · 174 阅读 · 0 评论 -
Codeforce 1238 E.Keyboard Purchase(思维 + 状压DP)
题目大意:有一个字符串序列是你从键盘上手打下来的,而你的键盘是一个线性的字符排列,只有 m 个按键(意味着只有 m 种字符)。由于你打印的时候手指需要移动,定义移动的花费为 两个按键之间的距离。你有 m!m!m! 种键盘,即键位你可以任意安排,需要使得整个打印的花费最小,输出这个最小值。题解(非常巧妙):首先需要移动的字符串对最多只有 n−1n - 1n−1 对,预处理任意两个字符对的数...原创 2019-10-17 20:54:51 · 281 阅读 · 0 评论 -
Codeforce 1238 D.AB-string(思维)
题目大意:有一个串只有A,BA,BA,B两种字母,定义一个子串sl,...,srs_l,...,s_rsl,...,sr是goodgoodgood当这个子串的每一个字母都被包含在一个长度>2> 2>2回文串中(回文串是这个子串内的回文串),求有多少个goodgoodgood串?直接分析一个子串内有多少个字符包含在回文里是不好分析的,正难则反,考虑用总串个数 - bad串。...原创 2019-10-17 18:18:11 · 187 阅读 · 0 评论 -
洛谷 P4827 [国家集训队] Crash 的文明世界(第二类斯特林数 + 树形DP + 思维)
代码:#include<bits/stdc++.h>using namespace std;const int maxn = 5e4 + 100;const int mod = 10007;int n,k;vector<int> g[maxn];int S[300][300],dp[maxn][300],pw[maxn];int cur[300];v...原创 2019-09-27 00:31:04 · 171 阅读 · 0 评论 -
Codeforce 1061 :D. TV Shows(multiset + 贪心 + 构造)
题目大意:有 n 个电视节目,每个节目有一个播放时间[ai,bi],你可以租用电视机来播放节目,租用一台电视机要先付 xxx(类似定金什么的),如果你在[a,b]时间段租用,你需要付租用的费用:y∗(b−a)y * (b - a)y∗(b−a)。当电视机播放一个节目时,电视机不能中途跳转到播放其它节目,一个节目被电视机播放时,也不能播到一半然后转到其它电视机去播放。问如何使租用电视机使得你可以播放...原创 2019-08-17 21:28:16 · 245 阅读 · 0 评论 -
codeforce 1152 (round 554) DIV2:D. Neko and Aki's Prank (思维 + dp + 贪心)
题意:有n对括号,把这n对括号所有合法的匹配画在字典树上,字典树的每一个结点都是合法的括号匹配(即任意一个前缀左括号数量大于等于右括号),问这棵字典树上不相交边集的最大数量是多少?解法:明白题意和字典树概念后,似乎可以用树形dp搞,建树是不可能建的,一看模数1e9 + 7,那么只能凭空想象然后在虚树上进行dp了,手画了一下第三个样例的字典树,有21个结点,贪心的从叶子结点开始选连接到它的边,一层...原创 2019-04-26 19:24:58 · 277 阅读 · 0 评论 -
Codeforce 961 G. Partitions(第二类斯特林数 + 思维)
题目大意:定义一个集合 SSS 的权值 W(S)W(S)W(S):∣S∣∑i∈Sw[i]|S|\sum_{i \in S}w[i]∣S∣∑i∈Sw[i]将 n 个元素的集合划分成 k 个子集,对所有的划分情况,对这些子集和求W(S)W(S)W(S)之和最容易想到的解法:枚举每一个元素w[i]w[i]w[i]的贡献,那么只需要枚举这个元素所在集合的大小即可。可以得到一个答案式子:re...原创 2019-09-26 21:49:26 · 327 阅读 · 0 评论 -
gym 101889 :G.Gates of uncertainty(树形dp)
题目大意:有一堆逻辑门,它的逻辑满足下图一堆逻辑门构成的一个逻辑图是一个树形图(显然),例如:现在有些逻辑门出现了故障,有些逻辑门固定输出1,有些逻辑门固定输出0。求有多少种输入对应的输出是不正确的?这个题显然可以用树形DP做,先考虑最后答案怎么得到:用根节点原本要输出 0,但实际上输出1的输入数量(下面称它为错误输出 1)加上 原本要输出1实际输出0的输入数量(称它为错误输出 0)。...原创 2019-09-21 21:38:21 · 184 阅读 · 0 评论 -
2019 Multi-University Training Contest 2 :Everything Is Generated In Equal Probability(期望DP + 思维)
题目大意:输入一个 N,然后在[1,N]范围内随机得到一个数字n,然后再随机得到一个长度为n的排列,设这个排列有cnt1cnt1cnt1个逆序对,在这个排列的基础上,生成一个子序列,,这个子序列的逆序对个数为cnt2cnt2cnt2个…,然后再从这个子序列循环下去直到最初生成的排列为空,问cnt1+cnt2+...+cntncnt1 + cnt2 +...+ cntncnt1+cnt2+...+...原创 2019-07-25 14:17:46 · 176 阅读 · 0 评论 -
POJ 1742 :Coins (思维,多重背包转移优化)
题目大意:有 n 种硬币,每种硬币有一定的数量a[i]和面值c[i],问你 1 ~ m内的所有面值,哪些面值可以由这些硬币组成。显然是多重背包问题,多重背包指的是每种物品具有有限个数量的背包问题。可以将每种物品拆成一个变成0 1背包问题,但这题数据太大这种拆解方法无法通过。更加优秀的方法是以 2进制形式拆解每一种物品,然后变成0 1背包,复杂度为 n∗m∗log(a[i])n * m * log...原创 2019-07-19 19:39:16 · 330 阅读 · 0 评论 -
Codeforces Round #574 (Div. 2) :D2. Submarine in the Rybinsk Sea (hard edition) (枚举 + 思维)
题目链接:https://codeforc.es/contest/1195/problem/D2题目大意:有n个数字,定义f(a,b)f(a,b)f(a,b):若aaa和bbb一样长,则按数位从左到右 aaa 先放,bbb后放,如此交替放下去。若aaa 和 bbb 不一样长,则从左到右先放长的数位,到剩余数位和较短的那个数一样长时,再和上面一样依次放。然后就会得出一个长度为len(a)+len(...原创 2019-07-19 09:56:23 · 202 阅读 · 0 评论 -
CF_101853B New Assignment (二分图+基础数论+仔细读题)
题目大意: 给n个人分组,这n个人格子有一个权值,分组条件是,组内人数不大于2人,必须异性,且gcd > 1。问最少分几组,对于所有的输入数据有: n <= 10000,ai <= 1000000,且任意三个人 必定互质(gcd = 1)。显然可以贪心得出尽量多分2人的组可以使组数最少,因为一组最多两人,而且必须异性,gcd必须大于1,很容易看出是一个二分图匹配模型。但是 n ...原创 2019-04-09 22:53:46 · 263 阅读 · 0 评论 -
1157 Round 555 DIV3 :F. Maximum Balanced Circle (构造算法 + 尺取法(双指针))
题目大意:给出一个序列A,要你从这个序列中选出一些元素构造出一个最长的新序列,这个新序列是一个环,且相邻的两个元素差值不超过1。解法:首先要知道差值为0也是可以的,但是贪心的从个数最多的元素开始构造是错的,需要枚举来构造答案最大的解。普通枚举区间复杂度达到O(n ^ 2),因此要换一种枚举方式:先将原序列排好序,这样能选的元素一定是在连续的区间,首先左端点,我们让右端点遍历序列,如果左端点到右端...原创 2019-04-27 21:00:27 · 177 阅读 · 0 评论 -
zoj:Sequence in the Pocket(思维)
题目大意:给一个混乱的序列,只有一种可执行的操作:把每个数字放到最前面,问最少经过几次可以把这个序列弄成不降序的序列。做法1:不难想到最差情况是移动n次,因为移动哪个数字,和什么时候移动这个数字都是由自己决定,不用想得过分复杂。详细过程:首先想到所有逆序了的数字都是要移动的,所谓逆序就是在这个数字之前有比他大的数字,一遍扫描可以把逆序了的数字抽出来(实际并没有抽出来),剩下的数字是原来就保持非...原创 2019-04-29 12:40:58 · 217 阅读 · 0 评论 -
2018 ccpc final:B. Balance of the Force (枚举)
题目大意:有n个骑士,每个骑士可以加入光阵营或暗阵营,并且获得一个力量,分别为L和D,现在有m对骑士不能在同一个阵营,问力量差值(最大值和最小值的差值)最小是多少?如果不存在阵营满足仇恨骑士不在同一个阵营内,则输出IMPOSSIBLE。解法:首先二分图判定一下是否存在奇环,若存在奇环则输出IMPOSSIBLE。按仇恨关系建边形成的图,注意到一个连通分量只要一个人选定加入哪个阵营,其他人的阵营也...原创 2019-05-06 00:15:42 · 668 阅读 · 0 评论 -
HDU 4609 : 3-idiots (FFT + 思维)
题目大意:有n条边,问随机选3条边能构成一个三角形的概率是多少。分析:能构成三角形的条件就是最长的边边长小于两条较短的边边长之和,从这个角度出发,答案的方案数可以为:枚举每一条边作为最长边,算出选较短的两条边其边长之和大于这条边的方案数,每条边的方案数加起来 除去 所有的选边方案即是答案。设 num[i]num[i]num[i] 为 边长之和为 iii 的方案数,主要是如何计算出 num[i...原创 2019-07-09 20:29:50 · 296 阅读 · 0 评论 -
*2019 Multi-University Training Contest 2:Longest Subarray(线段树+思维)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6602题解:如果右端点固定,每一种元素可行左端点是两段连续的区间(个数 >=k>= k>=k 和 =0= 0=0),扫描右端点,用线段树维护区间最大值来维护每一个元素左端点的可行区间,在每种元素左端点的可行区间做区间 + 1。更新答案时查找 值为 C的下标最小值(值...原创 2019-08-04 13:44:34 · 158 阅读 · 0 评论 -
2019 Multi-University Training Contest 1:Vacation(思维)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6581题目大意:单行道上在tom的车前面有 n辆车,每辆车有一个速度和车长,以及它们车头到终点的距离,因为有的车快有的车慢,最终车会挨在一起,如果两车挨在一起,那么后面的车速度会慢下来跟前面的车一样快,多辆车挨在一起也是同理。问tom的车的车头过终点线的时间是多少。分析:由于多辆车合并在一起,后面...原创 2019-07-22 19:36:31 · 241 阅读 · 0 评论 -
牛客挑战赛 32 :D 放物品(错排问题 + 分类讨论)
直接枚举每一对点,计算贡献以及有效贡献次数。会发现,贡献是一个等差数列的求和形式,可以预处理出来然后求和。贡献次数这里要分类讨论,设当前处理点对是 i,j1:i 占了 j 的位置,j也占了 i 的位置。贡献次数:d[n][0]2:i 占了 j 的位置,或 j 占了 i 的位置。贡献次数:d[n][1]3:i 不占 j 的位置,j 也不占 i 的位置。贡献次数:d[n][2]d[n]...原创 2019-09-21 10:45:41 · 199 阅读 · 0 评论 -
Codeforce 741 D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths (dsu on tree)
题目大意:(来源 : https://www.luogu.org/problem/CF741D)若排序后能变成一个回文串,则路径上最多只有一个字符出现奇数次,用0 1 表示每个字符出现是奇还是偶。dfs预处理每个点到根节点的所有字符出现状态 和 距离。当前点 为 i 时,最长路径要么经过 i,要么在 i 的子树中, 后者是一个子问题,可以用 dp 记录一下。考虑经过 i 的最长路径怎么解...原创 2019-09-05 13:07:23 · 423 阅读 · 0 评论 -
Codeforce 1099 F. Cookies(树形DP + 线段树预处理)
题目大意:在一棵有根树上,每个点有 x[i] 个饼干,在第 i 个点吃饼每块饼干要花 t[i] 的时间。现在有两个玩家 a,b,总共有T时间。a 初始在根节点,每次可以沿着树边走向子结点,每次移动都要花费一定的时间,a也可以结束游戏 ,当他结束游戏时,他开始向根结点返回,在返回途中他可以吃饼,但最后必须回到根节点。当 a 移动到 结点 i 时,b 可以选择删掉从 i 出发到其子节点的一条边。...原创 2019-09-03 10:40:17 · 143 阅读 · 0 评论 -
Codeforce 1061 C:Multiplicity(暴力预处理 + dp + 滚动数组)
题目大意:你有一个序列 a,定义 a 的子序列 b是一个good序列当 b 的每一个元素,能被它在b中所处位置的下标整除,求出 a 所有good 序列的数量。题解:考虑 a序列 的第 i 个元素 aia_iai,保留 aia_iai 的所有小于等于 i 的因子,设第 j 个小于等于 i 的因子为 g[j]g[j]g[j],尝试构造一个子序列使得aia_iai处于第g[j]g[j]g[j]...原创 2019-08-18 14:55:31 · 308 阅读 · 0 评论 -
HDU6701(2019杭电多校10):Make Rounddog Happy(单调栈 + 预处理(或分治 + 预处理))
题目大意:初始有一个序列 a,定义 a 的一个子序列是好序列:若 [l,r][l,r][l,r]内 max(al,al+1,..,ar)−(r−l+1)≤kmax(a_l,a_{l + 1},..,a_r) - (r - l + 1) \leq kmax(al,al+1,..,ar)−(r−l+1)≤k 且 al,al+1,...,ara_l,a_{l + 1},...,a_ral,al...原创 2019-08-21 23:09:03 · 255 阅读 · 0 评论 -
Codeforce 1096:D. Easy Problem(DP,思维)
题目链接:https://codeforc.es/contest/1096/problem/D题目大意:有一个字符串数组,每个位置有一个权值,删掉这个字符要付出这个位置的字符的权值的代价,字符串中可能包含了 “hard” 字符序列,你要删掉一些字符使得字符串中不会出现 “hard” 子序列,求最小删除代价。题解:考虑 “hard” 字符串,当前字符是 “d” 时,要么删掉这个 “d”,要么在...原创 2019-08-24 16:22:33 · 262 阅读 · 0 评论 -
Codeforce 1073 C:Vasya and Robot(思维 + 二分(尺取法))
题目大意:一个机器人想要从(0,0) 位置走到 (x,y)位置,它有一个长为n操作序列,由UDLR四种字母组成,代表4种操作:由于这个操作不一定能让它走到(x,y),但是你可以改动其中部分操作使得机器人最后还是在(x,y)这个位置。定义你改动的字母中,最左边和最右边的距离为你操作的距离,问要使得机器人最后在x,y 位置,你的修改操作的最小距离是多少。题解:如果想要贪心构造解使得改动的距离最小...原创 2019-08-13 21:26:09 · 334 阅读 · 0 评论