- 博客(742)
- 收藏
- 关注
原创 洛谷 P6040 单调队列优化DP
题目链接:https://www.luogu.com.cn/problem/P6040简单一维单调队列优化DP,单调队列优化DP的话要知道单调队列需要维护的是什么,并且有明确的左右边界,这样才能及时的加入新策略或删除过时策略#include<bits/stdc++.h>using namespace std;typedef long long ll;#define fi...
2020-04-29 14:57:15
299
原创 洛谷P2634 [国家集训队]聪聪可可 点分治+容斥
题目链接:https://www.luogu.com.cn/problem/P2634题意:问你有多少点对之间的距离是3的倍数思路:点分治,每次分治根u时统计经过u的距离%3,那么当前计算的答案就是res[0] * res[0] + res[1] * res[2] * 2,可以找样例算一下,然后算根的时候要容斥一下,其实也就是减去多算的儿子答案#include<bits/st...
2020-04-29 14:54:11
250
原创 CodeForces 161D Distance in Tree 点分治
题目链接:http://codeforces.com/problemset/problem/161/D题意:给你一棵树,让你求有多少对点的距离等于k 点分治裸题,每次分治子树记录经过当前根节点的距离#include<bits/stdc++.h>using namespace std;typedef long long ll;#define fi first#def...
2020-04-29 14:52:47
229
原创 POJ 1821 Fence 动态规划+单调队列优化
题目链接:https://www.acwing.com/problem/content/300/题意:有N块木板从左到右排成一行,有M个工匠对这些木板进行粉刷,每块木板至多被粉刷一次。第 i 个木匠要么不粉刷,要么粉刷包含木板 Si 的,长度不超过 Li 的连续的一段木板,每粉刷一块可以得到 Pi 的报酬,不同工匠的Si不同。思路:f[i][j]表示前i个工匠粉刷前j块木板的最多报酬,那么f...
2020-04-09 14:32:44
487
原创 CodeForces 915E Physical Education Lessons 线段树动态开点
题目链接:https://codeforces.com/problemset/problem/915/E题意:q次操作,每次将一段区间置0或者置1,然后输出1~n中0的个数思路:由于n太大,所以我们考虑线段树动态开点,可以大大减少点的数量便于维护,这也是一道动态开点的模板题#include<bits/stdc++.h>using namespace std;typedef...
2020-04-08 18:56:39
256
原创 Codeforces Round #629 (Div. 3) D. Carousel 思维
题目链接:https://codeforces.com/contest/1328/problem/D题意:给你n个数字构成一个环,对每个数字进行染色,要求相邻的不同数字不能颜色相同,求最小颜色数思路:如果全部相同的话那么都是1就行,然后当n是偶数时,我们1,2,1,2这样涂是可以的。当n是奇数的时候如果a[n] == a[1] ,那么1212这样依然可以,不相等的话我们就找到相等的且相邻的两...
2020-03-27 17:43:11
279
原创 Codeforces Round #629 (Div. 3) E. Tree Queries LCA
题目链接:https://codeforces.com/contest/1328/problem/E题意:给你一棵树,多次询问每次给你一个集合,问你能否选一条链使得集合所有点到这条链的距离不大于1思路:每次将集合按照深度排序,然后我们用深度最大的点和其余点依次求LCA,然后判断深度差是否大于1如果大于就说明不满足。#include<bits/stdc++.h>using...
2020-03-27 17:32:11
340
原创 Codeforces Round #629 (Div. 3) F. Make k Equal 思维
题目链接:https://codeforces.com/contest/1328/problem/F题意:给你n个数字的序列,每次你可以将最大的数减一,最小的数加一,问最少多少次操作后有k个相等的数思路:例如对于a[i], 我们需要将前面的改成a[i] - 1, 将后面的改成a[i] + 1, 所以我们将数组排序后用map分别记录一下某个值第一次出现和最后一次出现的位置,然后On 遍历对于每...
2020-03-27 17:17:16
376
原创 BAPC 2019 L-Lucky Draw 概率DP
题目链接:https://nanti.jisuanke.com/t/44330题意:有n个人玩游戏,每个人拥有k条生命。每轮每个人会有p的概率不会死,求最后是平局的概率思路:设f[i][j]表示i轮后剩余j条生命的概率,那么 f[i][j] = p * f[i - 1][j] + (1 - p) * f[i - 1][j + 1]由于生命都相同,P(平局) = 1 - P(某人赢) = 1 ...
2020-03-24 13:25:07
551
原创 BAPC 2019 G. Gluttonous Goop 线段树扫描线
题目链接:https://nanti.jisuanke.com/t/44323题意:有若干个小方块,每秒会往八个方向扩展,问k秒后有多少个区域被覆盖思路:k秒后每个格子都扩展成了一个矩形,所以也就是求矩形面积并,用扫描线很好解决。#include<bits/stdc++.h>using namespace std;typedef long long ll;#defin...
2020-03-24 13:22:48
318
原创 BAPC 2019 F. Find my Family set + 二分
题目链接:https://nanti.jisuanke.com/t/44322题意:给你n个数的序列,问你是否存在ai > aj, aj < ak, ai < ak, i < j < k思路:我们贪心的想,由于要是ak最大,所以我们从后往前取一个最大值,前面的用set维护一下二分找到第一个大于ai的,检查是否小于ak,并将找到的数从set中删除,扫描一遍即可。...
2020-03-24 12:34:14
358
原创 BAPC 2019 E. Efficient Exchange 思维+ 贪心
题目链接:https://nanti.jisuanke.com/t/44331题意:你有无限的1,10,100……金钱,现在你要花费n元,你的代价是花费的金币数和找零的金币数之和,求最小代价思路:对于小于5的位肯定是直接付比较优,大于5的话肯定是付10这种更优,等于5的时候需要特判一下如果进位对前面的位是否更优,更优的话(a[i - 1] >= 5) 就进位就行了#includ...
2020-03-24 12:26:20
579
原创 BAPC 2019 A. Appeal to the Audience 贪心 + DFS
题目链接:https://nanti.jisuanke.com/t/44317题意:给你一棵树和k个值,要把这k个值放在k个叶子结点上,而对每个非叶子结点来说它的值为儿子结点的最大值,求除了根节点外所有结点的最大权值和思路:无疑是贪心着放,首先选取深度大的点放权值大的。所以我们先统计一下每个点的深度用优先队列来维护深度最大的,每次将这条链标记一下,这样就能得到每个点的实际影响权值的深度...
2020-03-24 11:59:54
523
1
原创 Codeforces Round #619 (Div. 2) F. Super Jaber BFS最短路
题目链接:http://codeforces.com/contest/1301/problem/F题意:n*m的矩阵,每个点都有颜色,每次你可以去相邻的4个点或者任意颜色和当前点相同的点,问最少多少次从A到B思路:f[k][i][j]表示(i, j)这点到k颜色的点的最短路径,那么最小花费就是min(f[k][r1][c1] + f[k][r2][c2] + 1)需要注意的是当进行BFS时...
2020-03-17 13:18:59
261
原创 Codeforces Round #619 (Div. 2) E. Nanosoft 最大合法正方形
题目链接:http://codeforces.com/contest/1301/problem/E题意:对于一个正方形分成4等份,左上角红,右上角绿,左下角黄,右下角蓝才认为合法的,对于给定的矩形,询问你这个矩形中最大的合法正方形面积思路:用二维前缀和统计方块,正方形边长最大250,枚举边长,每次检查左上角个数是否为l*l,其余角同样,做个前缀和可以O(1)判断如果范围再大些我们可以用...
2020-03-17 13:16:27
212
原创 Codeforces Round #627 (Div. 3) F. Maximum White Subtree 树形DP 换根
题目链接:http://codeforces.com/contest/1324/problem/F题意:给你一颗树,每个结点为白色或者黑色,对于每个子树的权值就是白色点的数量 - 黑色点的数量,求1~n以每个点为根的子树的权值。思路:比较裸的换根DP,首先dfs一遍求出来以1为根的代价,然后再考虑每个点换根的代价就行了。#include<bits/stdc++.h>...
2020-03-16 23:18:07
214
原创 Codeforces Round #627 (Div. 3) E. Sleeping Schedule 线性DP
题目链接:http://codeforces.com/contest/1324/problem/E题意:每天有h小时,总共要睡n次,每次你可以选择在a[i] or a[i] - 1小时后睡觉。如果睡觉的区间在[l, r]的话认为是好的求如何安排使得睡觉好的次数最多。思路:f[i][j] 表示第i次在时间j睡觉的最多次数,有点类似背包的思想,我们枚举时间,每次只需要判断当前时间是否在[l...
2020-03-16 23:10:09
228
原创 CodeForces - 672D Robin Hood 【二分+思维】
题目链接:http://codeforces.com/problemset/problem/672/D题意:有n个人,每天钱最多的人要给钱最少的人一块钱,问k天后钱最多与最少的人间的差是多少。思路:可想而知,随之时间的增加,钱少的人的钱会越来越多,直到接近平均值,有钱人则越来越少,也接近平均值。假设我们现在考虑钱少的人,我们对其k天后的钱进行二分答案,可以知道其单调性满足,每次判断当前...
2019-11-27 14:51:28
227
原创 SQL语言基础
前言 最近在复习SQL这门课程,有许多需要记的地方,所以就做一个笔记,方便自己学习和以后的复习。数据定义 SQL的数据定义语句如下操作对象 操作方式 创建 删除 修改...
2019-11-26 14:16:09
898
原创 CodeForces - 1247E Rock Is Push【线性DP】
题目链接:https://codeforces.com/problemset/problem/1247/E题意:一个n*m的矩阵,有个别位置会有小球,小球受到撞击会沿着方向撞到墙为止(每个小球会占一个格子)。你从左上角出发,只能向右或者向下走,问你走到右下角的方案数。思路:首先我们定义我们的状态f[i][j][0] 表示在(i, j) 这个位置向右走的方案数,f[i][j][1] 表示在(...
2019-11-21 23:54:51
351
原创 CodeForces - 1247D Power Products【数论】
题目链接:https://codeforces.com/problemset/problem/1247/D题意:给你一个序列a,问有多少对i,j满足存在x使得 ai * aj = x ^ k , k是给定的。思路:两个数满足条件就是要相同因数的个数要是k的倍数,把每个数质因数分解,然后算出来补数,例如还需要2个2,就是4然后我们就在map里找这个补数,然后再将当前数的贡献存入map...
2019-11-21 23:30:01
430
原创 CodeForces - 1247C p-binary 【思维】
题目链接:https://codeforces.com/problemset/problem/1247/C题意:给你两个数n和p, 让你将n分解成最少的二进制位,但是二进制位变成了2^x + p, 例如当n = 24,p = 1时,思路:不难想到n在二进制分解后绝对不会超过40位,所以对于这么小的范围我们就暴力枚举多少位能够组成n就行了。但是有可以重复用某一位的情况,所以还需要记...
2019-11-21 23:26:25
256
原创 CodeForces 1247B2 - TV Subscriptions (Hard Version) 【思维】
题目链接:https://codeforces.com/problemset/problem/1247/B2题意:就是有k种频道,现在有一个播放频道的序列,问最少需要买多少个频道使得能够连续d天看。思路:比较简单的题目,我们只需要每次处理长度为d的区间,初始o(n)可以得到算出来需要购买的数量,然后区间右移,把左端点去掉,加上右区间端点,就可以得到一个新的答案,然后每次取最优就可以了。...
2019-11-21 23:17:11
529
原创 数列分块入门题集 LOJ 6277 ~ LOJ 6285
这几天把LOJ的分块专题刷了个大概,总结一下。LOJ 6277 数列分块入门一给出一个长为 n的数列,以及 n个操作,操作涉及区间加法,单点查值。思路:这个还是比较容易的,我们只需要快内暴力修改,再记录一个标记就可以了。#include<bits/stdc++.h>using namespace std;typedef long long ll;const...
2019-11-17 16:08:06
319
原创 洛谷 P2801 教主的魔法【分块】
题目描述教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1、2、……、N。每个人的身高一开始都是不超过1000的正整数。教主的魔法每次可以把闭区间[L, R](1≤L≤R≤N)内的英雄的身高全部加上一个整数W。(虽然L=R时并不符合区间的书写规范,但我们可以认为是单独增加第L(R)个英雄的身...
2019-11-13 21:19:30
265
原创 AcWing 109. 天才ACM【倍增+归并】
给定一个整数MM,对于任意一个整数集合SS,定义“校验值”如下:从集合SS中取出MM对数(即2∗M2∗M个数,不能重复使用集合中的数,如果SS中的整数不够MM对,则取到不能取为止),使得“每对数的差的平方”之和最大,这个最大值就称为集合SS的“校验值”。现在给定一个长度为NN的数列AA以及一个整数TT。我们要把AA分成若干段,使得每一段的“校验...
2019-11-06 00:51:39
322
原创 UVALive 8138-Number Generator【概率DP】
题意:随机的给你k个数,范围1~n,问你使得区间[1, n]的每个数都出现至少两次的期望次数。思路:f[i][j] 表示有i个数需要出现一次,j个数需要出现两次,那么:f[i][j] = i / n * f[i - 1][j] + j / n * f[i + 1][j - 1] + (n - i - j) / n * f[i][j] + 1f[i][j] = i / (i + j) *...
2019-10-31 20:27:40
189
原创 AcWing 138. 兔子与兔子【前缀哈希】
很久很久以前,森林里住着一群兔子。有一天,兔子们想要研究自己的 DNA 序列。我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含 26 个小写英文字母)。然后我们每次选择两个区间,询问如果用两个区间里的 DNA 序列分别生产出来两只兔子,这两个兔子是否一模一样。注意两个兔子一模一样只可能是他们的 DNA 序列一模一样。输入格式第一行输入一个 D...
2019-10-30 17:39:11
311
原创 POJ 1200-Crazy Search【滚动哈希】
描述许多人喜欢解决难题,其中一些难题可能会使他们疯狂。一个这样的难题可能是在给定的文本中找到隐藏的素数。该数字可以是文本中存在的给定大小的不同子字符串的数量。您很快就会发现,您确实需要计算机的帮助和良好的算法来解决这一难题。您的任务是编写一个程序,该程序给定子字符串的大小N,文本NC中可能出现的不同字符的数目以及文本本身,确定出现在字符串中的大小为N的不同子字符串的数目。文本。例如,考虑N...
2019-10-30 17:24:56
412
原创 HDU 5890-Eighty seven【背包 bitset优化】
题意:给你n(n<50)张牌, 让后q(100000)次询问,每次会抽调三张牌,然后问你剩下的牌数能否拼成87.思路:这题可以用背包来做,预处理出所有情况下的答案,但是会超时,这时候我们就需要bitset来优化一下了。bitset相当于一个bool类型的数组,每次用上一次的值左移a[i] 位然后或上当前值,最后判断一下第87位是否为1就行了。#include<bits/s...
2019-10-22 17:03:48
343
原创 CodeForces - 148D Bag of mice【概率DP】
Pear和Fish正在进行这样一个游戏:一个袋子里一开始装着w个白球和b个黑球。从Pear开始,每次轮流随机抽出一个球。如果抽出的球是白色的,则抽出这个球的人立即获胜。每当一个球被取出后(然后结算获胜情况后),会有另一个球自动滚出来(不算任何人抽的)。每个人抽球、和自动滚出来的球都是等概率的。那么Pear获胜率是多少呢?Input两个数w,b含义如上。w,b<=1000Out...
2019-10-15 22:25:47
244
原创 HDU 3853-LOOPS【期望DP】
题意:有一个R*C的迷宫,从(1,1)走到(R,C),每个格子给出停留在原地,向右走一格和向下走一格的概率,且每走一步需要2点能量,求最后所需要的能量期望。题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3853思路:f[i][j] 就表示走到(i, j) 这个点的期望能量,那么转移方程不难想到,这题主要有两个需要注意的地方,一是停留在原地的花...
2019-10-15 17:16:31
388
原创 SGU 495-Kids and Prizes【期望DP】
题意:有n个奖品,m个人排队来选礼物,对于每个人,他打开的盒子,可能有礼物,也有可能已经被之前的人取走了,然后把盒子放回原处。求最后m个人取走礼物的期望总数。多组数据保留9为小数思路:f[i] 表示第i个人取走礼物的期望总数,那么对于f[i] 来说, 它有f[i - 1] / n 的概率取到一个空的,1 - f[i - 1] / n 的概率取到一个礼物,那么转移方程就是f[i] = ...
2019-10-15 15:33:31
235
原创 HDU 4405-Aeroplane chess【期望DP】
题意:0到n的格子,每次仍色子走1到6步,也可能会有飞行棋,直接跳到某格,问你走到n的期望步数。思路:期望倒着推,f[i] 就表示走到i格子的期望。正着考虑的话你不知道当前位置是哪个地方来的,可能是之前六个位置的,也可能是之前某个飞行棋跳过来的,所以我们倒着考虑,每个位置只会去往六个地方。所以f[i] = sum( f[i + k] / 6 ) + 1 , 1 <= k <= 6...
2019-10-15 14:22:21
238
原创 HDU 3652-B-number【数位DP】
题意:让你求[1, n] 中包含子串“13” , 并且能够被13整除的数量。思路:dp[i][j][k][t] ,表示第i位前缀为j且模数为k时的答案,1表示包含串“13”,0表示不包含,剩下来就是模板套了。dp数组初始化一次就行了,状态不冲突可以利用之前记录的答案。#include<cstdio>#include<cstring>#include<io...
2019-10-07 22:10:33
197
原创 UVALive 6972-Domination【概率DP】
题意:给你一个n*m的方格,每天选择一个空格子放置棋子,使得棋盘每一行至少有一个,每一列也至少有一个,问你期望天数。思路:f[i][r][c] 表示第i天已经有r行c列放置了棋子,然后考虑下一天会有哪种情况,1. f[i + 1][r][c] : 在已经出现过的行列中2. f[i + 1][r + 1][c] : 在已经出现过的列中,但未出现的行中3.f[i + 1][r][c ...
2019-10-06 19:30:36
227
原创 POJ 3744-Scout YYF I【概率DP+矩阵快速幂】
题意:有n个地方有地雷,给出来你下标,对于每个位置i, 你走到i+1的概率是p,走到i+2的概率是1-p,问你不被地雷炸的概率。思路:这题转移方程很好想,就是f[i] = p * f[i - 1] + (1 - p) * f[i - 2], f[1] = 1.但是由于n范围很大,我们考虑用矩阵快速幂来优化,我们将地雷按照下标分段,只要经过这一段我们不被地雷炸就行了,#include&...
2019-10-05 11:15:41
228
原创 POJ - 2096 Collecting Bugs【期望DP】
题意:某个系统中有n个子系统和m个bug类型,该系统每天会出现一个bug (属于某个子系统和某个bug类型),bug的类型是等概率的,bug也是等概率地出现在每个子系统的。问所有子系统都出现bug且所有的bug类型都出现的期望天数。思路:f[i][j] 表示找到i种bug,找到j个子系统的bug,要求期望天数,所以我们从后往前推。f[i][j] 发现一个bug属于已知的种类和系统概率为 ...
2019-10-04 23:25:40
224
原创 POJ 3252-Round Numbers【二进制数位DP】
题意:问你一个区间内有多少个二进制下0的个数比1的多的数。思路:dp[i][j][k] 表示第i位二进制长度为k,其中0的个数为j的答案,然后剩下的就是一些细节问题,比如计算当前总位数不能计算前导0,而且计算0的个数的时候也不能算上前导0,二进制的和十进制的相差也不大,就是在二进制上枚举而已。#include<cstdio>#include<cstring>#...
2019-10-03 15:50:13
248
原创 POJ 3208-Apocalypse Someday【数位DP+二分】
题意:给你一个n(n<5e7),让你找到第n个包含“666”的数。思路:妥妥的数位DP,我们可以考虑二分答案,左边界为0,右边界我提前试了一下发现在(1<< 32)之内,我们不断逼近左边界一定可以找到答案,需要注意的是会计算上0,所以要减去1#include<cstdio>#include<cstring>#include<iostre...
2019-10-03 10:20:15
286
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人