![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
cf
asd
whoammiiiiii
这个作者很懒,什么都没留下…
展开
-
cf 1076D 堆优化dij性质
题意:给你一个n个点m条边的无向图,定义如果1号点到 i 号点的距离是原图的最短距离就是好点,现在让你最后最多只能剩k条边,同时让好点的个数最多,问你剩的是哪k条边,输出边个数和剩下的边的编号。思路:首先明确如果剩k条边,同时要好点最多,那么就有min(k+1,n)这么多个好点(包括点1),因为一条边就可以制造一个好点,所以接下来就利用堆优化dij的性质,在队首的那个点一定已经是最短路了,无法被松弛,所以只要dij里面松弛的时候记录一下之前的那条边的编号,直到pop了min(k+1,n)个点就brea原创 2020-12-29 14:45:04 · 152 阅读 · 0 评论 -
Codeforces Round #674 (Div. 3) VP记录
比赛链接A,B,C 签到题D题意:给你一个长度为n个序列,现在让你往之间插几个数,使得这个序列中不存在和为0的子序列(可以不连续)。思路:经典转换模型: 用最少的点串完所有的区间。const i64 N=200000+100;i64 n,a[N];int main() { map<i64,int> cnt; cin>>n; i64 now=0,ans=0,lst=0; vpi temp; for1(i,n){原创 2020-10-01 00:25:16 · 271 阅读 · 0 评论 -
CF 1400E(分治)
题意:有n个栅栏,第i个栅栏的高度为ai。现在有两个操作1.把[l,r]区间内的栅栏高度全都减1。2.把第i个栅栏减去任意一个值。现在问你最少要做几次操作才能让所有栅栏的高度全为0。思路:我们可以发现如果要做操作1的话,肯定是从最低的栏杆开始减,所以可以想到分治,按照由低到高分治解决问题。#include <bits/stdc++.h>#define ll long longusing namespace std;const ll maxn=6000;ll n,a[max原创 2020-08-26 19:11:14 · 195 阅读 · 1 评论 -
Codeforces Round #661 (Div. 3) A~E1
A模拟,拍个序看a[i]-a[i-1]是不是<=1B有n对物品,每个物品有两个值a,b现在有3个操作a–b–a-- && b–问你最少要操作多少次才能使所有物品的a,b相同。O(n)扫一下维护一下n对物品最小的a和最小的b,然后瞎搞就行。C问最多有多少对a[i]+a[j]相等。n<=50,a[i]<=n,随便怎么搞都行。D给你一串01串,让你把他分成最少数量的子串,子串是010101… or 10101…的形态。搞两个s..原创 2020-08-06 01:34:16 · 115 阅读 · 0 评论 -
cf 1358C Celex Update(看似是组合问题的思维题)
题目链接昨天的cf题,差点因为这道题翻车了,幸好后面力挽狂澜XD。一看这道题,一猜,路径上的数值之和肯定都是不同的,一写,自信一交,等待1a,wa on pretest 2,gnls,然后找了15分钟规律猜了个结论过了。题解的思路是这样的:把他想象成一个(借用cf tutorial里的图)这个样子的一个东西,初始状态是路径的和最小的那个状态,你要做的只是每次把他右上角的那个角给他按下去,就是把路径的和增加了,这样就能保证没有重复,可以看出答案就是 dx * dy + 1。#include <原创 2020-05-27 15:58:00 · 220 阅读 · 0 评论 -
cf 1354D multiset(数值范围1e6之间用线段树实现multiset的插入,查找,单个删除功能)
题目链接线段树最常见的每个节点是存未知的信息,但这题不一样,建立线段树的节点是保存数值的信息,这题每个节点记录的是出现的次数。先通过原来"multiset"里有的元素更新一下线段树。插入:插入num,把区间[num,num]的节点+1,然后pushUp。查找: 查找第num大的数,看左子树节点存的值是不是大于num,大于num的话就往左子树找,否则num = num - 左子树的值,然后往右子树找,l == r时return l。单个删除:先查找到第k大的数num,然后对区间[num, nu原创 2020-05-18 03:37:08 · 185 阅读 · 0 评论 -
CF 20C Dijkstra?(预处理+bfs)
题目链接题意:给你以后n个点(编号为1~n),m个无向边,有可能形成环,问你从 1 到 n 的最短距离是多少,如果到不了就输出-1, ps:两点之间可能有多条边。思路:一看这题不是bfs秒了吗,直接bfs维护每个点的最短距离, 那么问题来了,为什么会T, 点的范围1e5,边的范围1e5, 1e5+1e5没理由t啊,因为这不是到了这个点就可以把这个点去掉的bfs,而是要维护到这个点最短距离...原创 2020-04-04 18:27:22 · 192 阅读 · 0 评论 -
Codeforces Round #629(div3)题解
比赛链接D题意:给你n个数(形成一个换),现在要让你给这n个数上色,只有一个限制:如果相邻的两个数不同,那他们俩的的颜色也要不同。现在问你最少需要颜色的数量,然后输出结果。思路:感觉没几种情况,分类讨论一下就过了。1.如果所有数都相等只要一种颜色。2.如果长度n为偶数的话,只要两种颜色,1 2 1 2…这样排就完事了。那我们接下来是要考虑n为奇数的情况。现在假设n个数的编号为1...原创 2020-03-29 02:32:29 · 247 阅读 · 0 评论 -
codeforces round#615 div3题解
比赛连接A题意:给你三个人分别有的糖果数,现在你是老大,你有很多糖果要分给这三个人,条件是最后三个人的糖果数要一样多,并且你的糖果要发光,不能有剩余。思路:先让每个人的糖果数相同,如果还有糖果剩余,那就判断是不是最后能每个人的糖果数都一样。#include <bits/stdc++.h>#define mp make_pair#define mt make_tuple...原创 2020-01-27 04:59:24 · 1423 阅读 · 0 评论 -
div2 #602 (线段树维护区间第i个数)
题目链接题目大意:给你一串n个数的序列,然后m个询问a b问你在1~n区间内选取a个和最大的那个区间,并选取下标字典序最小的那个区间,输出这个区间内第b个数。总结:1e6,2e5的操作次数的数据,可以考虑线段树。multiset选取某个位置的数,可以用这题线段树的用法替代。线段树做法:#include <bits/stdc++.h>#define mp make_p...原创 2019-12-03 22:13:15 · 137 阅读 · 0 评论 -
Educational Codeforces Round 72 :B
题目链接:添加链接描述题目大意 : 你要去打多头怪兽,你有n种砍法,怪兽有m个头,给出n行砍法的数据,每行两个数d, h 表示砍掉怪兽 min(当前还有几个头, d) 个头后他就会长出h个头(一种砍法可以无限次使用),如果砍了头数为0(在长头之前),即为成功,问你最少砍多少次才能杀掉怪物,如果永远杀不了,那就输出-1.总结:各种情况的先后处理顺序要拎清。(被hack了。。)思路:1.首先看...原创 2019-09-06 17:16:34 · 198 阅读 · 0 评论 -
Codeforces Round #552 (Div. 3) A B C D
D. Walking Robottime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputThere is a robot staying at X=0 on the Ox axis. He has to walk to X=n. You ar...原创 2019-04-17 16:29:12 · 226 阅读 · 0 评论