10 2021 档案

摘要:题目链接 其实题意还挺难理解的。。。 其实就是定义了一个数组,叫做 num[i] 假设字符串为 s=abcababc 那么num[4]=1, 因为在前缀子串s[1,4]=abca (我这里下标是从1开始)中后缀a与前缀a相同所以为1 假设字符串为 \(s 阅读全文
posted @ 2021-10-25 16:44 ViKyanite 阅读(30) 评论(0) 推荐(0) 编辑
摘要:题目链接 题意非常简单,就是在最短路的基础的上加上了可以施魔法(经过这条边的时候,将权值取反,注意只是经过的时候取反,并不是永久的)的操作。 看到n的范围只有100,很快的就能想到floyd或者分层图 首先我们分析,每次使用魔法必然能让最短路变短,那么我们一定会将k次魔法用满,那么题意就转化为,恰好 阅读全文
posted @ 2021-10-22 14:08 ViKyanite 阅读(71) 评论(0) 推荐(0) 编辑
摘要:题意是给你一个长度为N的数组,你在每个长度大于等于K的连续区间里,取出第K大的数,组成一个新数组。问新数组中第M大的数是什么。 这道题最最重要的就是,尺取法可以求出第k大的数大于等于x的区间数。 为什么可以呢?假设我们尺取法已经取到了K个大于等于x的数的区间,当我们右指针往后移动的时候,新加入的数对 阅读全文
posted @ 2021-10-18 19:54 ViKyanite 阅读(36) 评论(0) 推荐(0) 编辑
摘要:一般来说棋盘问题都会与二分图或者生成树有关。 一开始我也是往二分图上去想的, 首先考虑行最大值和列最大值的最大值,记为 x,找到最大值需要等于 x 的行和列,设有 n 行和 m 列的最大值需要等于 x。原本是需要在每一行、每一列共 n + m 个位置放置 x,发现如果在他们交叉位置放置 x的话,可以 阅读全文
posted @ 2021-10-13 14:35 ViKyanite 阅读(53) 评论(0) 推荐(0) 编辑
摘要:题意就是给你一个长度为n的数组,之后有两种操作,第一种是[L, R]都异或上x,第二种是[L, R]异或上x, x+1, x+2, x+3... 对于第一个操作我们非常容易就能操作,即异或差分数组。 但是对于第二个操作我们就比较头疼了,我们要怎么把 + 符号去掉变成 ^ 呢。 (因为异或是不满足分配 阅读全文
posted @ 2021-10-13 11:38 ViKyanite 阅读(69) 评论(0) 推荐(0) 编辑
摘要:这场貌似是因为贪玩就没打了。 vp了一下发现正好是我薄弱的部分,没打有点可惜。 A (+1) WA2: #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; co 阅读全文
posted @ 2021-10-12 14:30 ViKyanite 阅读(30) 评论(0) 推荐(0) 编辑
摘要:首先考虑最暴力的做法。那复杂度是q * range的显然会爆。 原本我是想用什么数据结构优化这个过程,但是想了想好像没什么东西处理划分这个操作。 于是考虑观察这个操作的性质,我们发现对于每个范围,一旦L确定那么,在[L, R] 之间的划分数其实是固定的。(但是划分方案可能会有很多种) 这里可以稍稍证 阅读全文
posted @ 2021-10-03 15:52 ViKyanite 阅读(35) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示
主题色彩