![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
codeforces
文章平均质量分 75
瑞灯的路牌
直面
展开
-
codeforces 581d
题意:问三个矩形能不能组成一个正方形思路:其实就只有题目给的那2种情况,枚举每个放的情况和顺序就好了#include#include#include#include#include#include#includeusing namespace std;#define N 2000010#define lim 200000#define MOD 10000原创 2016-01-18 16:00:57 · 351 阅读 · 0 评论 -
codeforces 786c Till I Collapse
题目:将这个数列分割成m段,每一段里面数的种类不超过k,现在询问当 k在[1,n]之间时,对应的m去最小,分别是多少?思路:首先计算所有的集合数量到底有多少 n+n/2+n/3+n/4+n/5.....大约是原创 2017-05-25 14:41:52 · 480 阅读 · 0 评论 -
codeforces 803G Periodic RMQ Problem
题意:放大版的区间更新的线段树题解:由于实际上操作并不会生成太多节点,而且只有更新才会生成新节点,如果查询的时候发现下面并没有节点,就知道下面没有更新而且原来数组是循环的,所以直接得到答案,如果更新过就会有节点生成,就如同原来一样计算就行,更新操作就像如同原来的线段树一样,只是如果当前节点不存在就给他生成一个。ps:看到有人是用离线算法写的,有兴趣的同学可以去学习下姿势。原创 2017-05-25 14:57:20 · 251 阅读 · 0 评论 -
codeforces 556D Case of Fugitive
题意:一条线上有个n个大陆,范围给定且不相交,现在要邻近的大陆搭n-1座桥(桥的两段要在大陆上),给你m座桥的长度,问你怎么分配?思路:其实就是n-1个区间和m个数,从m个数里面挑n-1个数一一对应区间,这个要求不小于左区间,不大于右区间。先对区间的左区间排序,从假设从1开始走,如果遇到左区间就塞入区间,如果遇到超出区间范围就剔除(就是没有匹配到,输出no了),但是如果遇到原创 2017-05-25 15:11:43 · 447 阅读 · 0 评论 -
codeforces 811C Vladik and Memorable Trip
题意:选择n个区间内所有的元素不能在外部出现,求所有各区间内的集合元素异或和?思路:先预处理可行的区间,然后扫一波即可。#include #include #include #include #include #include #include #include using namespace std;#define LL long longconst原创 2017-05-27 22:47:15 · 313 阅读 · 0 评论 -
codeforces 813e 莫队算法
题意:给你一个区间 问你有总共多少个元素 ? 但是有一个条件 就是如果这个元素超过k个 当k个来算思路:由于题目限制,所以只能是在线算法。如果知道一个区间,往左端加入一个点,只要知道这个的往右数第k个和它相同的数是否在这个区间么就可以了,右端同理。然后计算了一下复杂度和条件,发现可以使用莫队算法。ps:其实可以使用在线的主席树,当时没想到,而且由于只记得莫队算法的思想,所以原创 2017-06-30 10:29:26 · 283 阅读 · 0 评论 -
CodeForces - 675E
题意:一开始 你在第一个站 现在告诉每个站可以买一张票去其他地方(只能去比他坐标大的) 最后一个站没有卖n表示 有n张车站于是有n-1张车票车票ai 表示这张车票可以从 i 车站出发 去 i+1 车站到 ai车站的任意一个车站 现在 假设 pij 表示从i 到 j 的车站 最小用票数量求所有的pij的和思路:假设我原创 2017-09-08 13:41:00 · 297 阅读 · 0 评论 -
CodeForces - 1101F
题意:洛谷有中文题意,链接:https://www.luogu.org/problemnew/show/CF1101F思路:只考虑一辆车,我们可以很简单的使用二分操作对V进行二分找到答案,运行的时间是可以接受的。因为目前车的数目太多了,我们无法直接进行二分操作,所以我们考虑使用的是一辆车一辆车的V,一步一步地提升V。但是考虑到极端地情况下,复杂度依然很高。其实我们发现其实最终的V只取决于其中一...原创 2019-01-25 09:54:16 · 234 阅读 · 0 评论 -
CodeForces - 1117G
思路:如果我们只考虑一个点在一个区间内所提供的贡献,那么只要需要知道左第一个比他大的数离他的距离和右边第一个数比他的距离即可。而两边处理步骤是一样的,因此,可以先算完左边,在算右边。首先先对询问离散化处理,然后使用单调队列预处理出每个点最左或最右的位置,然后使用两个树状数组储存,并计算答案。#include <bits/stdc++.h>using namespace std;...原创 2019-02-23 10:15:38 · 195 阅读 · 0 评论 -
CodeForces - 809C
思路:从起始点开始,每隔(2^n)*(2^n)(n为任意正整数)矩阵之间,不同矩阵中数的和之差为n*n*n,而连续个x个(2^n)*m矩阵之和为(1+x*2^n)*x*2^n/2,因此我们可以快速统计连续2^n区间和,对k进行切割即可。#include <bits/stdc++.h>using namespace std;#define MOD 1000000007#de...原创 2019-03-28 12:29:44 · 194 阅读 · 0 评论 -
codeforces 757e Bash Plays with Functions
题意:给你两个数 n和r 可以做r次分解当r大于0 n可以分解成两个因子u和v u*v=n 当r 等于0 n分解出的两个因子的gcd要为1如题意所给的公式来计算最终结果思路:仔细观察 在 r相同的情况下 25 和 4 30和42 的答案是相同是由于 他们的构成结构相同 即n=(a^x)*(b^y)*(c^z) ...原创 2017-02-09 19:09:53 · 560 阅读 · 0 评论 -
codeforces 645e
题意:在原字符串加上n个字符(1e6) 使得他的不同子串数量最多 字符范围为k思路:先考虑放一个字符 会有生成多少个新字串 ,那么我们来统计现在如果包含这个字符的子串,由于这个字符是放在最后的,所以,字串增加数量就是*2,但是有重复的部分没有减去,那么什么字串会重复呢? 由于是最后一个字符,所以重复的肯定是上次出现字符放到最后以后形成的所有子串,那么减去这个数,就可以得出新加了多少原创 2016-03-23 10:21:57 · 478 阅读 · 0 评论 -
codeforces 464c 465e
题意:给你一个数字 然后每次改变一种数 问你最后数字MOD 10e9+7 是多少?思路:我们只要知道某种数最后变成怎么样就好。所以我是从最后一次变化往上推,每一次要变的那种数都是向下一次取得数据进行改造。#include#include#include#include#include#include#includeusing namespace std;原创 2016-02-26 15:21:14 · 477 阅读 · 0 评论 -
codeforces 557d
题意:给你一幅图 问给至少还要几条边 使得这个图还存在奇环。思路:如果是只存在一个偶环 那么表示为二分图 那么图的左边的点之间有联通 那么只需要选择左边任意两个点加上一条边 就可以构成奇环 同理可以算出所有答案。当然还有2种特殊情况 一种是 左边点不联通和 没有边的情况,这些另作考虑(看不懂题目 去查题意 结果看到二分图 于是。。。)#include#i原创 2016-01-19 16:49:56 · 397 阅读 · 0 评论 -
codeforces 338e
题意:根据伪代码 求出答案思路:其实他要我们求的是一个符合他条件 a[] 的连续的子串有多少个 这个字串必须满足一个条件 就是经过和b[]任意的匹配后 每一对数之和需要大于等于 一个特定的值 那么 最优的方案就是贪心 子串最大的 和 最小的b[]的匹配 第二大和第二小的 。。。。 如此匹配 虽然源代码得到的最后匹配不是这个 但是如果不满足这个方案 就肯定无解对于每个a[] 我们可以从原创 2016-01-22 13:28:24 · 413 阅读 · 0 评论 -
codeforces 338b Book of Evil
树形dp原创 2016-01-21 13:24:37 · 356 阅读 · 0 评论 -
codeforces 617e
题意:m个区间询问 问数组中 区间范围为 l,r 问在区间中 ai, ai + 1, ..., aj =k 的数量思路:对于 ai^ai+1^ai+2....=(a1^a2^..ai-1)^ (a1^a2^..ai^ai+1^ai+2) 即两个端点x-1和y的 前缀异或和的异或和 ,而每次压入一点,假设他的前缀是A 增加的数量就是 当前位置上有多少个 A^k即是增加的数量原创 2016-01-26 17:18:10 · 543 阅读 · 0 评论 -
codeforces 620e
题意:给你一颗树 (一开始染好色的) 给你两种操作 一种是把当前节点和他的子树染成同一种颜色 还有一种是查询他和他的子树 到底有多少种不同的颜色?思路:假设 他是一根直线 那么就是线段树 区间操作染色 中间合并就是或操作即可 因为他的染色方案不多 但是转换成一棵树的话 我们先进行一次深搜 由于深搜方式可以使得他和他的子节点的编号是连续的 所以就可以使用直线的方法一开始 看题是对树的区原创 2016-01-28 15:51:45 · 372 阅读 · 0 评论 -
codeforces 616E - Sum of Remainders
题意:计算 n mod 1+n mod 2 + ... n mod m 思路:其实计算 n mod x 可以转换为 n - [n/x]*x n/x=i 是一个连续的范围 比如 10/4 =2 10/5=2 我们只要计算出 n/x=i 的一个范围 ,就可以用等差公式求和了 ps :上网查了一下 有开方的策略 好像才是正确姿势 = = 代码太丑 爆了好多次LL #i原创 2016-01-15 09:28:28 · 470 阅读 · 0 评论 -
codeforces 616D Longest k-Good Segment
题意:求一个最长连续的不同元素数量不超过k的序列思路:利用一个窗口滑动,左端点表示当前位置,右端点表示目前这段数列符合要求, 每增加一个长度,判断是否合理,不然平移左端点。#include#include#include#include#include#include#includeusing namespace std;#define N 1000010原创 2016-01-15 10:08:23 · 415 阅读 · 0 评论 -
codeforces 624d 623b Array GCD
过年玩了20天 都不会写了题意:有两种操作,每种只能用一次,第一种对于一段连续区间进行移除(不能全删完),代价是长度*a,第二种是对于一些数进行+1或者-1,使得最后的剩余的最大公约数大于1思路:由于不能全删完,所以至少会有一个数留着,这个数肯定会是头一个或最后一个,最大公约数肯定是在选中的这个数最后状态中的一个约数,而我们只要先枚举这个数是多少(一共6种),然后枚举他的原创 2016-02-19 17:04:24 · 656 阅读 · 0 评论 -
codeforces 626f
这题不会写 看了官方题解才知道 T T 感觉涨姿势了 题意:将数据分成若干组 每组的价值为最大值减去最小值 问不超过可k的方案数 有多少种?思路:虽然我知道是一道dp题目,但是第二个状态总是朦朦胧胧想不出来 首先对数据排序dp状态分为三种:第一个状态是当前是哪个数据了第二个状态是当前还有几组(这些组代表了一定要加)第三个状态是当前至少还会加多少值原创 2016-02-22 15:54:58 · 744 阅读 · 0 评论 -
codeforces 628e
好像是被我水过了 因为题目给了5s题意:问图像中到底有多少个z型图像。思路:对于每一个点都有可能是最左下角的点,那么把对于每一个 斜边 看成大区间 区间每一个点都是都有两个值 一个是能到右边的最远距离 一个是到左边的最远距离+i(加权)只要对于每一个点的答案是把右边的最远距离作为区间长度 统计出区间 左边是否能满足比如 3x3zzz.z.原创 2016-02-24 17:10:10 · 539 阅读 · 0 评论 -
codeforces 650d Zip-line
题意:求改变原数列的一个数以后 最长上升子序列的长度,询问之间没有联系。思路:设原序列的lis为k,那么答案只有k-1,k,k+1三种。这里有一个结论,如果一个数在lis之中,那么他在lis的位置是一定的。所以只要判断在这个位置上有多少个数就可以知道这个数是否在原序列的lis是必须的。如果是必须的,那么在没有这个数的lis就是k-1,否则就是k。那么接下来只要求出有这个数的数列的lis原创 2016-03-22 13:35:19 · 468 阅读 · 0 评论 -
CodeForces - 1182D
题意:找到一个点作根,使同一深度的点有相同数目的边。思路:经过简单的观察,实际上这样的树有一个特征:当某一个点作根符合题目要求时,每个相同深度的节点其子树的节点数目是相同的,或者是每个相同深度的节点作根,其子树结构相同。那么答案只有两种情况,一种是叶子,一种是某个点(唯一一个),其每一个所连接的子树的节点数目相等。因此面对判断一个点是否是答案的难题,可以比较每个节点作根时其子树节...原创 2019-06-21 18:52:08 · 401 阅读 · 0 评论