codeforces
IZUMIXINGI
这个作者很懒,什么都没留下…
展开
-
树的直径专题
https://www.luogu.com.cn/problem/CF734E原创 2021-12-01 10:43:27 · 165 阅读 · 0 评论 -
LCA专题训练
CF1328E Tree Queries 题目链接对节点高度进行排序,检查前后两个节点,如果高度相同,他们应该拥有相同的爸爸,如果高度不同,高的那个爬一步,然后低的那个爬到和高的一样的高度,看是否是同一个点。#include<bits/stdc++.h>#pragma comment(linker, "/stack:200000000")#pragma GCC optimize("Ofast")#pragma GCC target("sse,sse2,sse3,ssse3,sse4,原创 2021-11-30 22:32:33 · 601 阅读 · 0 评论 -
Codeforces Round #757 (Div. 2) E. Divan and a Cottage
首先可以观察到一个性质:对与两个不同的起始温度t1和t2(t1 < t2),不管怎么变化温度,最终变化得到的温度T1和T2有T1 <= T2,容易想到维护一个关于起始温度的线段树,进行区间更新和单点查询。考虑到起始温度范围较大,故使用动态开点的方式进行处理:#include<bits/stdc++.h>#pragma comment(linker, "/stack:200000000")#pragma GCC optimize("Ofast")#pragma GCC targ原创 2021-11-29 19:44:30 · 416 阅读 · 1 评论 -
Codeforces 191C C. Fools and Roads [倍增求lca +树上差分]
求lca步骤:1、dfs求每个节点的父亲和深度2、dp3、求lcavoid init_dep(int u,int pre){ dp[u][0] = pre; for(int i = head[u];i != -1;i = e[i].nxt){ int v = e[i].v; if(v == pre)continue; dep[v] = dep[u] + 1; init_dep(v,u); } }void init_dp(){ for(int i = 1;i <= 2原创 2021-11-07 16:19:08 · 252 阅读 · 0 评论 -
CF212E IT Restaurants
考虑删除每一个点之后,对所有相连的支干大小进行背包#include<bits/stdc++.h>#pragma comment(linker, "/stack:200000000")#pragma GCC optimize("Ofast")#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")#define debug(x) cout<<#x<<" is "<原创 2021-11-06 12:41:55 · 150 阅读 · 0 评论 -
[线段树优化建图|dijkstra]Codeforces Round #406 (Div. 2) D. Legacy
总体思想是,使用线段树思想,用点和区间进行连边,只有当一个区间已经是最小值时才更新该区间内所有的点;具体思路参照这里:洛谷代码实现:#include<bits/stdc++.h>#pragma comment(linker, "/stack:200000000")#pragma GCC optimize("Ofast")#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")#defin原创 2021-10-27 11:15:22 · 110 阅读 · 0 评论 -
Codeforces Educational Round #66 (Rated for div.2) E. Minimal Segment Cover
最小区间覆盖,当只有一次询问时就是一个贪心问题,按左区间排序,每次选择左端点在已经覆盖的点 + 1中,右端点能覆盖的最远的点;当有m个询问时,考虑使用倍增的方式求解(类似于二分查找):dp[i][j]表示从位置i起,选择2j个区间能到达的最远位置如果在i这个位置取2j个能到>=r的地方,我们当然希望能找到一个小于等于2j个区间使得能够覆盖到r点,所以选取区间不断逼近r但不超过r,最后一次要检查一步能不能从当前l到r,故输出ans + 1#include<bits/stdc++.h>原创 2021-10-23 17:10:28 · 74 阅读 · 0 评论 -
Codeforces Round #745 (Div. 2) E. Train Maintenance
Codeforces Round #745 (Div. 2) E. Train Maintenance补一下这道题,本来以为线段树魔改,结果好像不是,还是自己太菜了,代码主要参考官方solution,然而他的tutorial写的我不太能接受,看完代码还是选择用我自己的方式来解释一遍~题目大意:有n辆车,m天,每辆车干x天休息y天,每天可以选择一种操作:操作1:将第k辆车挑出来,开始工作操作2:第k辆车退休每天都询问当天有多少辆车在休息。考虑最朴素的做法,对每个休息区间进行更新,使用差分数组进行维原创 2021-10-01 22:25:27 · 460 阅读 · 0 评论 -
[2021-9-23]补题记录
Educational Codeforces Round 54 (Rated for Div. 2)E. Vasya and a Tree题目大意:给定一棵以1为根节点的树,每个节点值为0,给定若干修改,x,d,v,为x节点及其dist(x,y)<=d的子节点y,值加上v,最后输出各节点的值;解法:离线修改,使用树状数组在树上对深度进行差分,记得回溯时修改回来,避免这条子路径对另一条子路径产生影响。#include<bits/stdc++.h>#define pb push_bac原创 2021-09-23 16:23:47 · 106 阅读 · 0 评论 -
[补题]Technocup 2021 Elimination Round 3 and Round #692 D grim zoo
题目大意:字符串由0,1,?三种字符组成,每个子序列01产生x价值,每个子序列10产生y价值,?要替换成1或者0,问产生最小价值为多少?关键:当0和1的数量确定的时候,cnt(00)和cnt(11)是固定的, 而cnt(01) + cnt(10) = total_cnt - cnt(00) - cnt(11)此时也是固定的,因此,当x > y 时希望10数量越多越好,01数量越少越好,对于固定的01数量,1越放前面越好,因此,不妨先令所有问号为0,计算此时总的价值,然后从前往后置问号为1每一步取一原创 2021-09-17 11:12:37 · 2081 阅读 · 0 评论 -
CF发病操作集锦
1、692 B fair number给定一个正整数n∈[1,1e18],如果n能够整除n的每一位,则称n为fair number发病操作:想当然的认为暴力不可做实际上:lcm(1,2,3,…,9) = 2520,最多只需要把低四位加到2520的倍数即可,暴力可做2、692 C. Peaceful Rooks给定一个n * n矩阵,m个点(m < n),点与点之间不能在同一行同一列,问多少次操作能将这m个点移到对角线上想到的:①:x != y --> ans++②:点与点之间若原创 2020-12-23 14:01:25 · 134 阅读 · 0 评论 -
Codeforces Educational Round 100 A~E解题报告
A、#include<bits/stdc++.h>#pragma comment(linker, "/stack:200000000")#pragma GCC optimize("Ofast")#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")#define debug(x) cout<<#x<<" is "<<x<<endl#def原创 2020-12-18 22:21:00 · 366 阅读 · 1 评论 -
Codeforces round 690 解题报告
A、前后前后输出一下#include<bits/stdc++.h>#pragma comment(linker, "/stack:200000000")#pragma GCC optimize("Ofast")#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")#define debug(x) cout<<#x<<" is "<<x<<e原创 2020-12-16 20:53:24 · 107 阅读 · 0 评论 -
Codeforces Round #689 (Div. 2, based on Zed Code Competition)解题报告
a.#include<bits/stdc++.h>#pragma comment(linker, "/stack:200000000")#pragma GCC optimize("Ofast")#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")#define debug(x) cout<<#x<<" is "<<x<<endl#def原创 2020-12-12 01:14:57 · 477 阅读 · 0 评论 -
codeforces round 686解题报告
a.输出一个数组它的a[i] != i,有两种思路,逆序输出然后交换中间位置,另一种是直接输出i = i%n + 1#include<bits/stdc++.h>#pragma comment(linker, "/stack:200000000")#pragma GCC optimize("Ofast")#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")#define debug(x原创 2020-11-30 15:47:00 · 162 阅读 · 0 评论 -
Codeforces Round #685 (Div. 2) 赛后题解
这场昨晚没打,早上补的,错过了一场上分场a.1,2,3特殊处理,其他奇数和偶数下降次数分别为2,3#include<bits/stdc++.h>#pragma comment(linker, "/stack:200000000")#pragma GCC optimize("Ofast")#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")#define debug(x) cout&l原创 2020-11-22 14:04:48 · 159 阅读 · 0 评论 -
Codeforces Round #683 (Div. 2, by Meet IT) A~E题解
这场开心也不开心:开心:上蓝了不开心:明明可以把E写出来的QAQ,主要前面在梦游,最后十几分钟相处方案已经来不及了A.傻逼题不解释,把每个数都加到(1 + n) * n /2 就行#include<bits/stdc++.h>#define debug(x) cout<<#x<<" is "<<x<<endl#define fi first#define se second#define pb push_back#define m原创 2020-11-16 11:00:46 · 419 阅读 · 0 评论 -
Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) D - Extreme Subtraction
思路:对每个点尽量从左边减,算从右边最少的减的次数,如果这个次数超过a[i]则非法 #include<bits/stdc++.h> #define pb push_back #define mp make_pair #define fi first #define se second #define p_q priority_queue #define all(x) (x).begin(),(x).end() #define rall(x) (x).rbegin(),(x).re原创 2020-11-03 17:35:56 · 303 阅读 · 0 评论 -
Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad)A~D
A#include<bits/stdc++.h>#define debug(x) cout<<#x<<" is "<<x<<endl#define fi first#define se second#define pb push_back#define mp make_pair#define DBG 0const int N = 1e5 + 5;typedef long long ll;const int INF = 0x3f3原创 2020-11-02 11:00:29 · 2076 阅读 · 7 评论 -
Codeforces Educational round 95 E. Expected damage
看土神录播秒懂,主要就是把大于b的点产生伤害的概率和小于b的点产生伤害的概率算出来,由于两部分分别概率都是一样的,可以使用前缀和去处理。#include<bits/stdc++.h>#define compute(x) cout<<#x<<" is "<<x<<endlusing namespace std;typedef unsigned long long ll;const ll mod = 998244353;ll fast_原创 2020-09-19 20:10:07 · 196 阅读 · 0 评论 -
cf1418 D. Trash Problem迭代器prev和next的用法
昨晚写了一发很不优雅#include<bits/stdc++.h>#define pb push_back#define mp make_pair#define fi first#define se second#define p_q priority_queue#define all(x) (x).begin(),(x).end()#define rall(x) (x).rbegin(),(x).rend()#define inf 0x3f3f3f3fconst int原创 2020-09-15 22:42:18 · 424 阅读 · 0 评论 -
题解 CF1409F 【Subsequences of Length Two】
dp[i][j][k]表示前i个字符修改j个包含k个s2[1]的最优个数,不修改s1[i + 1]时更新dp[i + 1][j][k + s1[i + 1] == s2[1]],修改时若更新为第一个更新dp[i + 1][j + 1][k + 1],否则更新dp[i + 1][j + 1][k + s2[1] == s2[2]]#include<bits/stdc++.h>#define pb push_back#define mp make_pair#define se second原创 2020-09-06 15:57:28 · 331 阅读 · 2 评论 -
[codeforces 1409]E. Two Platforms
题意:有两块长k的板子,可以在任意整数座标水平放置,问最多有多少小球的投影在板子上首先注意到所有小球只关系它的xx座标,与yy座标无关因为同样的xx座标,板子的yy座标肯定无穷小(能接住所有掉下来的小球)所以现在问题是两段长k的线段,最多能覆盖多少点?我们可以枚举第一块板子的起始点和终点,再求后缀最大的覆盖#include<bits/stdc++.h>#define pb push_back#define mp make_pair#define se second#defin原创 2020-09-06 10:48:35 · 156 阅读 · 0 评论 -
[POJ 3666] S - Making the Grade
首先对高度大小进行排序,d[i][j]表示第i个修改为第j大最少的消耗,dp[i][j] 由dp[i - 1][k] 更新,(1<=k<= j)代码如下:#include<iostream>#include<algorithm>#include<vector>#define debug(x) cout<<#x<<" is "<<x<<endl#define pb push_back using na原创 2020-09-04 20:10:28 · 129 阅读 · 0 评论 -
[codeforces 1400| greedy | divede and conquer]E. Clear the Multiset
题目地址题目思路:对一个区间,只考虑2操作结果为(r - l + 1),加入1操作时,一定执行 t = min(al,al+1,al+2…,ar)次才能使结果最优化,对剩余区间不断执行以上操作,直至结果最优化。#include<bits/stdc++.h>using namespace std;typedef long long ll;#define mp make_pair#define fi first#define se second#define pb push_bac原创 2020-08-29 11:01:37 · 95 阅读 · 0 评论 -
[codeforces | 树状数组]round1400 D. Zigzags
题目链接:super_Link对树状数组的更新不了解可以看博客:博客地址代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;#define debug(x) cout<<#x<<" is "<<x<<endl#define pb push_backconst int N = 3000 + 5;vector<int> g[N];ll原创 2020-08-28 20:57:28 · 117 阅读 · 0 评论 -
[codeforces | greedy]B. RPG Protagonist
这题主要在于不能一次性的求出贪心结果,必须遍历第一个角色然后求出第二个角色的贪心结果。时间复杂度为O(n)#include<bits/stdc++.h>using namespace std;typedef long long ll;#define debug(x) cout<<#x<<" is "<<x<<endlll ans;int main(){ int t; //freopen("input.txt","r",stdin)原创 2020-08-28 16:49:26 · 111 阅读 · 0 评论 -
E2. Weights Division (hard version)
思路:尽量一步一步的走,若一步无法得出结果,在p1堆顶和第二堆顶的位置cost总和小于p2最大的cost时,选择p2堆顶的值。题解:#E2. Weights Division (hard version)#wrtier: qiurun#time: 2020/8/21#include<bits/stdc++.h>using namespace std;#define pb push_back#define mp make_pair#define se second#defin原创 2020-08-21 17:38:01 · 269 阅读 · 0 评论 -
[codeforces] 1399 E1. Weights Division (easy version)
题目链接题目大意:求由所有根节点到树叶节点带权路径之和,要求经过不断地对某个路径/2,使总和<=给定S,求对路径权重/2的次数。解题思路:一条边可能是n个根节点到叶节点的路径的边,此时它对sum的贡献是n*w,我们不能简单根据贡献选取边进行除2,考虑w = 7,n = 7,和w = 10,n =5,此时对sum的cost分别为28和25,因此,我们应该选取对sum cost最大的边进行操作。#include<bits/stdc++.h>using namespace std;原创 2020-08-20 10:47:20 · 181 阅读 · 0 评论 -
codeforces 1131F Moving Point(树状数组+离散化)
codeforces 1131F Moving Point题目:There are n points on a coordinate axis OX. The i-th point is located at the integer point xi and has a speed vi. It is guaranteed that no two points occupy the same...原创 2020-03-14 12:41:16 · 157 阅读 · 0 评论