07 2021 档案

摘要:传送门 解题思路 简化一下问题,即为给你一个数组a,对于所有的i,将a[i]到fa[a[i+1]]路径上的点加一。 注意端点处理(可以理解为拐弯处只记一次)。 AC代码 #include<iostream> #include<cstring> #include<cstdio> #include<al 阅读全文
posted @ 2021-07-31 23:33 尹昱钦 阅读(30) 评论(0) 推荐(0) 编辑
摘要:传送门 解题思路 首先明白题意: 能经过的点必须满足其所有连向的节点都能走到终点。 于是我们就可以建个反图,跑一遍dfs,求出有多少满足条件的点,最后bfs跑一遍即可。 如何判断? 用一个num数组表示节点i在原图的出度,即在反图的出度。 每当有一个点指向节点i时,num[i]--。 最后若num[ 阅读全文
posted @ 2021-07-27 23:55 尹昱钦 阅读(44) 评论(0) 推荐(0) 编辑
摘要:传送门 解题思路 用dp[i][j]表示没有消失时前i个物品组成装满容积为j的背包的方案数。 很显然, dp[i][j]+=dp[i1][jw[i]] 仿照背包,i这一维可以省去,j要逆序。 然后再设f[i][j]表示去掉第i个物品时装满容积为j的方案数。 那么在dp中减去用到i这个物品 阅读全文
posted @ 2021-07-26 14:37 尹昱钦 阅读(68) 评论(0) 推荐(0) 编辑
摘要:传送门 解题思路 首先很显然的贪心是 在每个地方放置的士兵一定是某个敌人放置士兵的两倍加一。 这样每个地方就有s种放置方法,每种对应一个数量和一个权值,于是就成了很典型的分组背包。 AC代码 #include<iostream> #include<cstring> #include<algorith 阅读全文
posted @ 2021-07-26 14:09 尹昱钦 阅读(56) 评论(0) 推荐(0) 编辑
摘要:传送门 解题思路 很妙的一道贪心题。 首先很显然的是,一定先把能回血的怪先干掉,然后再去干扣血的怪。 分类讨论: 对于回血的怪,显然按照d从小到大排序,以免你一开始就被干死。 对于扣血的怪,我们倒着考虑,从终止状态,每次减去a,然后加上d,就变成了回血怪的情况。 所以对于扣血的怪按照a从大到小排序。 阅读全文
posted @ 2021-07-25 11:19 尹昱钦 阅读(51) 评论(0) 推荐(0) 编辑
摘要:传送门 ##解题思路 设 i,j 相邻,前面的重量和为 x。 若 i 在上面更优,则 max(xs[i],x+w[i]s[j])<max(xs[j],x+w[j]s[i]) xs[i] 一定小于 x+w[j]s[i]xs[j] 阅读全文
posted @ 2021-07-25 11:17 尹昱钦 阅读(33) 评论(0) 推荐(0) 编辑
摘要:洛谷传送门 高维前缀和 一维二维前缀和 首先多维前缀和肯定可以像二维一样进行容斥求出,但是很显然复杂度爆炸。 所以我们使用另一种求法。 二维前缀和: for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ a[i][j]+=a[i-1][j]; } } for(i 阅读全文
posted @ 2021-07-20 17:52 尹昱钦 阅读(190) 评论(0) 推荐(0) 编辑
摘要:传送门 解题思路 最小值最大————很显然先二分最终答案,然后贪心进行切割: 从头开始判断每一行能否切成b块大于二分的数的蛋糕,若不能就不断向下加行。 而判断过程可以用二维前缀和优化。 AC代码 #include<cstdio> #include<iostream> #include<cstring 阅读全文
posted @ 2021-07-20 15:25 尹昱钦 阅读(85) 评论(0) 推荐(0) 编辑
摘要:##传送门 大难不死,必有后福 自从在空间里大骂后 十分钟过了两道调了两天的题…… ##解题思路 非常经典的一个对序列进行模拟退火的题。 求方差时直接用公式就行(平均数一开始可以预处理出来) 求分组后最小的方差需要用到dp。 dp[i][j]表示前i个数分j组的方差。 直接枚举k转移即可。 ##注意 阅读全文
posted @ 2021-07-18 18:21 尹昱钦 阅读(72) 评论(0) 推荐(0) 编辑
摘要:##传送门 ##解题思路 先用Floyd求一遍最短路, 然后对m个点之外的序列模拟退火,取前k个设置城堡,O(N^2)求出当前对小距离,判断并更新ans。 没什么注意的但是我rand()写在while外面了所以调了一个小时把我心态搞崩了草 ##AC代码 #include<cstdio> #inclu 阅读全文
posted @ 2021-07-18 17:44 尹昱钦 阅读(77) 评论(0) 推荐(0) 编辑
摘要:##传送门 ##解题思路 特别狗的一道题 根据重力势能最小时平衡(??),可以进行模拟退火。 其他的套板子行了。 然后我就写挂了~~(交了24次)~~ ##AC代码 #include<cstdio> #include<iostream> #include<cstring> #include<cmat 阅读全文
posted @ 2021-07-17 16:30 尹昱钦 阅读(45) 评论(0) 推荐(0) 编辑
摘要:##洛谷传送门 ##模拟退火 推荐一篇感觉写得很好的洛谷日报 补充一点就是可以加个判断(这个题因为有多组T不适用): while ((double)clock()/CLOCKS_PER_SEC<MAX_TIME) SA(); 注意这个题的输出格式特别狗…… ##AC代码 #include<cstdi 阅读全文
posted @ 2021-07-16 19:37 尹昱钦 阅读(33) 评论(0) 推荐(0) 编辑
摘要:##传送门1 ##传送门2 一维请出门右转。 ##二维前缀和 d[i][j]表示从 (1,1) 点到 (i,j) 点的和。 很显然: 求d数组:d[i][j]=d[i-1][j]+d[i][j-1]-d[i-1][j-1]+a[i][j] 求(a,b)到(c,d)的和:d[c][d]-d[a-1][ 阅读全文
posted @ 2021-07-13 21:37 尹昱钦 阅读(117) 评论(0) 推荐(0) 编辑
摘要:##传送门 ##解题思路 总体思路:二分W,对于每个W求得一个y,根据y-s的正负调整l和r,并且每次更新ans。 如何求y? 可以扫一遍矿石,用a数组记录下符合条件的数量的前缀和,b数组记录下符合条件的v的求点缀和;再枚举每个区间加起来即可。 ##AC代码 #include<iostream> # 阅读全文
posted @ 2021-07-13 18:03 尹昱钦 阅读(45) 评论(0) 推荐(0) 编辑
摘要:##传送门 ##解题思路 比较巧的一道题。 把yx=zy化简一下得x+z=2y,这要求x和z一定要同为奇数或偶数。 所以很明显我们首先要对他们分类: 按照奇数偶数点 按照颜色 这样就化成了若干个集合,而我们需要快速求出每个集合对答案的贡献。 把数学式子列一下: \(\sum_{i=1}^ 阅读全文
posted @ 2021-07-13 17:33 尹昱钦 阅读(261) 评论(1) 推荐(1) 编辑
摘要:##传送门 ##解题思路 仔细阅读题目,发现按照顺序插入每一个节点,且按照二叉搜索树的规则。 于是满足这两个条件其实就是笛卡尔树。 但是注意这里的x是读入的数,y是读入的数的下标。 构建完笛卡尔树后,其先序遍历的x值就是最终的ans。 (按照样例画个图就很显然了) ##AC代码 #include<i 阅读全文
posted @ 2021-07-11 22:52 尹昱钦 阅读(100) 评论(0) 推荐(0) 编辑
摘要:##传送门 ##前置知识 单调栈 ##笛卡尔树 ###定义 每个节点都由一个键值二元组构成(x,y)。 要求构建一棵树,满足: x上是一个二叉搜索树(左儿子<根<右儿子) y上是一个小根堆 ###构建过程 于是我们可以按照x值从小到大将节点加入笛卡尔树中。 新加入的点now一定要放在某个节点的右儿子 阅读全文
posted @ 2021-07-11 09:51 尹昱钦 阅读(121) 评论(0) 推荐(0) 编辑
摘要:##传送门 ##解题思路 发现某谷有单调栈板子了,就在这里贴一份代码吧。 单调栈讲解 ##AC代码 #include<cstdio> #include<iostream> #include<cstring> #include<iomanip> #include<cmath> #include<alg 阅读全文
posted @ 2021-07-11 08:42 尹昱钦 阅读(143) 评论(0) 推荐(0) 编辑
摘要:##CF传送门 ##洛谷传送门 ##解题思路 注意每个叶子节点的修改是独立的,不会对后面造成影响。 所以我们先从根遍历一边,O(n)求出不改变之前根节点的取值。 然后再从根遍历一遍,求出每个儿子变化会不会对根节点造成影响: AND:若另一个儿子是0,则无影响,否则有影响 OR:若另一个儿子是1,则无 阅读全文
posted @ 2021-07-07 20:58 尹昱钦 阅读(36) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示