AC Road
文章平均质量分 66
记录题解心得
HeartFireY
可能是ACMer、JXNU计算机科学协会前会长
展开
-
“蔚来杯“2022牛客暑期多校训练营4 N.Particle Arts 规律 方差
那么考虑求经过无限此碰撞后生成的新序列,容易发现因为或操作的性质,首先可以发现,任意两个元素相撞变化后,不会引起总和的变化,因此。但可以直接怼上方差公式,但是又会爆。若干次碰撞后,方差会收敛。于是直接按位统计后生成新序列计算即可。,那么可以在运算过程中全部使用。相撞后会湮灭并产生两个新元素。,那么无限次或操作会将为。...原创 2022-07-30 18:04:35 · 203 阅读 · 0 评论 -
CAIP2021 初赛VP
暴力打表,然后O(1)O(1)O(1)回答询问即可。B.7-2 芬兰木棋分象限和坐标轴按斜率排序,然后每个区域按顺序进行遍历,动态改变方向统计即可。最大分数一定是所有木棋之和。可以assert检验答案对不对。C.7-3 打怪升级先跑Floyd再跑Dijkstra,代码没存…属于是什么算法都能杂一起了。。。典中典之并查集维护倒序加点...原创 2022-07-06 12:39:40 · 398 阅读 · 0 评论 -
The 19th Zhejiang Provincial Collegiate Programming Contest VP记录+补题
The 19th Zhejiang Provincial Collegiate Programming Contest VP记录+补题第19届浙江省赛 19th浙江省赛 题解/补题原创 2022-07-05 18:11:49 · 6800 阅读 · 0 评论 -
The 19th Zhejiang Provincial Collegiate Programming Contest 2022浙江省赛 F.EasyFix 主席树
The 19th Zhejiang Provincial Collegiate Programming Contest 19th 2022 浙江省赛 F.Easy Fix 主席树 可持久化权值线段树原创 2022-07-03 22:39:35 · 705 阅读 · 0 评论 -
算法竞赛命题指南(命题流程、Polygon的使用等)
本文主要讲述人经验,可能与实际理解存在偏差,亦有片面的观点,还请见谅!主要包含Codeforces Polygon介绍、土法命题介绍等原创 2022-07-02 17:49:46 · 4923 阅读 · 2 评论 -
2022 东北四省赛 VP记录/补题
–待补–要求在给定的图上选择一个连通块,使得该连通块到其他点的距离和最小。考虑贪心的选取,我们可以将图展开,然后从叶节点开始按照逆BFSBFSBFS序进行删点,删完n−kn-kn−k个为止。可以用拓扑排序实现这个过程,设dis[i]dis[i]dis[i]表示该点子树的边数(边权和),在排序过程中更新最大值即可。C.SegmentTree题目分析要求在给定的覆盖[1,m][1,m][1,m]区间的线段树上找qqq条路径(自行构造),使覆盖的点的数目最大。首先可以肯定的是,当q≥mq \ge mq≥m时原创 2022-07-02 17:34:35 · 1390 阅读 · 1 评论 -
AtCoder Beginner Contest 077 D-Small Multiple 妙妙最短路
太妙了将kkk的倍数看作k%0k \% 0k%0的同余类,那么我们发现,对于任何的数字可以表达为+1+1+1和×10\times 10×10的表达式。我们可以发现,+1+1+1会对答案产生+1+1+1的贡献,而×10\times 10×10不会产生贡献。那么我们从iii出发,向(i+1)(i + 1) % k(i+1)建dis=1dis= 1dis=1的边,向i×10i \times 10i×10建立dis=0dis = 0dis=0的边(在完全剩余系中建边),然后求1−01-01−0的最短路即可。答原创 2022-04-02 10:15:32 · 682 阅读 · 0 评论 -
2021 ICPC Southeastern Europe Regional Contest 树上dfs+思维
|–>传送门<–|题目大意给定一颗nnn个节点的树,可以从任意一个点开始dfsdfsdfs,求最小字典序的后续遍历。题解首先,对于字典序最小的要求,我们一定是从叶结点中的最小值开始遍历的。我们可以记录每个节点的度,然后倒序寻找度为111的节点。然后,我们对当前节点uuu进行讨论,我们有两种策略:认为当前节点不是根节点:先将子树按最小权排序。如果发现当前子树中的最大最小值小于uuu,那么显然此时输出uuu不是最优策略,所以此时应当先dfsdfsdfs第kkk个子树(当作父节点向上走)原创 2022-04-01 16:39:07 · 535 阅读 · 0 评论 -
NamoCamp 每日一题 体育节 区间DP
|–>题目传送门<–|题目描述学生会正在为体育节的接力赛做准备。学生会由 n个成员组成,他们将在比赛中一个一个地跑,第 iii 个人的速度是 sisisi,第 i次接力会产生一个差异值 did_idi,它的值是前 iii个参与接力赛的人的速度最大值与最小值的差,也就是说,我们假设第iii个参与比赛的人的速度是 aia_iai,那么 di=max(a1,a2,...,ai)−min(a1,a2,...,ai)d_i =\max(a_1,a_2,...,a_i) - \min(a_1,a原创 2022-04-01 16:35:20 · 420 阅读 · 0 评论 -
Codeforces Round #780 (Div. 3) ABCDEF
A - Vasya and Coins给定a,ba, ba,b表示aaa个111和bbb个222,要求求出最小不能被表示出的数。2×b+1,2×b2 \times b + 1, 2 \times b2×b+1,2×b可以表示a+2×ba + 2 \times ba+2×b范围内的所有数字(除111之外),那么缺1(a=0)1(a =0)1(a=0)时输出111,如果aaa不是000,此时因为有111也能被标示,所以直接输出a+2×b+1a + 2 \times b + 1a+2×b+1。#includ原创 2022-04-01 16:31:24 · 452 阅读 · 0 评论 -
The 2020 ICPC Asia Macau Regional Contest J.Jewel Grab 线段树+双向链表模拟
思路对于每个位置的宝石,分别维护pre[i]pre[i]pre[i](同色前一宝石所在位置)和nxt[i]nxt[i]nxt[i](同色后一宝石所在位置)。注意到kkk很小,那么对于每次询问,我们可以从开始点往后找,查询当前点是否有同色点位于前面且位于[s,n][s,n][s,n]内,有的话比较大小,决定是否跳过。对于区间单点维护操作,我们需要对preprepre和nxtnxtnxt进行更新,更新的过程类似于单链表,每个颜色单独构成一条链:删除原有元素(讨论:元素位于序列头部、尾部、中间)。添加原创 2022-03-30 21:57:16 · 1190 阅读 · 0 评论 -
Codeforces Round #779 (Div. 2)
A. Marin and Photoshoot既然要求相邻两人111男111女,那么对于000000中间暴力插222个111,对于010010010中间暴力插111个111即可。#include <bits/stdc++.h>#define int long longusing namespace std;inline void solve(){ int n = 0; cin >> n; string s; cin >> s; int原创 2022-03-28 16:30:47 · 376 阅读 · 0 评论 -
AcWing 4381. 翻转树边 暴力DFS
思路可以考虑利用树上前缀的和思想来处理。实际上就是利用根节点记录反向反信息。我们首先处理出根节点到所有点的反转次数,然后再用一个dfsdfsdfs处理出每个节点的信息。注意第二个dfsdfsdfs,第二个dfs 根节点往下走的时候是逆过程,根节点->当前节点的顺向边都是负贡献,反转次数+1,反之亦反。邻接表&&链式前向星均可,输入输出都没卡,可以说非常善良了。AC Code#include <bits/stdc++.h>const int N = 1e6 +原创 2022-03-27 21:23:30 · 677 阅读 · 0 评论 -
2021 ICPC Southeastern Europe Regional Contest ABFGJKLN
|–>传送门<–|A. King of String Comparison 双指针给定字符串AAA和BBB,计算满足Asub[l,r]A_{sub[l, r]}Asub[l,r]字典序小于Bsub[l,r]B_{sub[l,r]}Bsub[l,r]的[l,r][l, r][l,r]的个数。直接双指针扫一下,扫到满足的前缀就直接进行计数。否则直接跳下一个。#include <bits/stdc++.h>#define int long longusing namespa原创 2022-03-24 20:21:15 · 2386 阅读 · 0 评论 -
Educational Codeforces Round 125 (Rated for Div. 2) ABCD
我服了。A. Integer Moves一共三种情况:当前点已经为终点两点之间直线长度为整数,走欧拉距离两点之间直线长度不为整数,走曼哈顿距离#include <bits/stdc++.h>#define int long longusing namespace std;const int N = 1e5 + 10;inline void solve(){ int x, y; std::cin >> x >> y; if(.原创 2022-03-23 11:53:27 · 264 阅读 · 0 评论 -
Subarray Sorting 思维+前缀最小值
题目要求每次可以选择一个不减的区间进行排序,那么显然暴力翻转不可行,那么考虑对性质进行维护。我们考虑从小到达对每个数字进行归位操作。对于B[i]B[i]B[i]而言,如果其在A[]A[]A[]中的位置为pospospos,且B[i]B[i]B[i]为[1,pos][1, pos][1,pos]的最小值,那么才能够进行归位操作。因为之前匹配的元素实际上已经移动到了前面,但是我们并没有实际上对AAA序列进行修改,即所有未匹配过在[1,pos][1,pos][1,pos]这一区间的值的位置都在B[i]B[i]B原创 2022-03-19 17:15:56 · 456 阅读 · 0 评论 -
Educational Codeforces Round 123 (Rated for Div. 2) ABCDE
A.Doors and Keys写个if,然后疯狂复制粘贴。#include <bits/stdc++.h>using namespace std;inline void solve(){ string s; cin >> s; bool st[3] = {0, 0, 0}, flag = true; for(int i = 0; i <= s.size(); i++){ if(s[i] == 'r') st[0] = true原创 2022-02-23 15:49:39 · 206 阅读 · 0 评论 -
Codeforces Round #770 (Div. 2) E. Fair Share 二分图染色 补
思路题目给定mmm个整数序列,要求尝试找到一种分类方式,将每个序列分到222个可重集合中。要求在分类完成后,两个集合的完全相同。首先考虑一定非法的情况:容易发现:对于某个序列长度为奇数的情况,一定不存在解(无法对半分)对所有的数字开桶记录,如果存在某个数字的出现次数为奇数,则一定不存在对等的分配方案我们可以对每个序列的编号向其元素编号连无向边,可以发现分L,RL,RL,R符合二分图的性质,那么直接遍历二分图进行染色即可。注意,由于序列的编号和元素的编号会发生重叠,因此我们对元素的编号需要进行原创 2022-02-22 12:01:08 · 567 阅读 · 0 评论 -
Codeforces Round #772 (Div. 2) E 二分图染色+拓扑序
思路根据题目描述,显然对于两辆存在关系的车:不可相遇:两车应相反而行一定相遇:两车应相对而行可以发现,两种关系下,车的的方向一定不相同。那么我们可以构造一张二分图,然后对图进行0−10-10−1染色判断合法性。然后考虑排序问题,显然对于存在关系的车(设坐标为xL,xRx_L, x_RxL,xR):不可相遇:xL>xRx_L > x_RxL>xR一定相遇:xL<xRx_L < x_RxL<xR我们规定被染色为000的节点都向左走,染色为1原创 2022-02-21 23:54:30 · 232 阅读 · 0 评论 -
Codeforces Round #772 (Div. 2) ABCD
A - Min Or Sum根据题目要求可以发现,要使得总和尽可能地小,应尽可能将选择的(ai,aj)(a_i, a_j)(ai,aj)变为(ai∣aj,0)(a_i | a_j, 0)(ai∣aj,0)。那么统计111的位数求和或直接所有元素求或即可。#include <bits/stdc++.h>#define int long longinline void solve(){ int ans = 0, n = 0; std::cin >> n;原创 2022-02-21 18:37:46 · 237 阅读 · 0 评论 -
[线段树]打字练习2
1.P1908 逆序对动态开点线段树/离散化均可解决。动态开点线段树维护桶,每次插值时统计值域上[val,max_val][val, max\_val][val,max_val]的区间和,比其大的数的个数就是对总逆序对个数的贡献。#include <bits/stdc++.h>#define ll long long using namespace std;const int maxn = 5e5, maxx = 1e9 + 7;int sum[maxn << 5],原创 2022-02-20 19:42:31 · 593 阅读 · 0 评论 -
Educational Codeforces Round 122 (Rated for Div. 2) ABCD
A - Div. 7暴力枚举最后一位#include<bits/stdc++.h>#define int long longusing namespace std; const int N = 1000;int a[N]; inline void init(){ for(int i = 1; i <= 200; i++) a[i] = 7 * i;} inline void solve(){ int n = 0; cin >> n;原创 2022-02-17 14:55:25 · 393 阅读 · 0 评论 -
[线段树]打字练习记录
随手打打字1.P3372 【模板】线段树 1裸板子#include <bits/stdc++.h>#define int long longusing namespace std;const int N = 1e5 + 10;int tree[N << 2], lazy[N << 2];inline void push_up(int rt){ tree[rt] = tree[rt << 1] + tree[rt << 1 |.原创 2022-02-16 12:10:22 · 315 阅读 · 0 评论 -
Codeforces Round #771 (Div. 2) ABCD|E
A.Reverse思路给出一个[1,n][1, n][1,n]的排列, 要求翻转一次区间,使字典序最小。一次操作字典序最小,那么操作后从头开始的顺序序列长度应该+1+1+1。那么显然是找到第一个错位的位置,该位置当前点数字一定大于其坐标(证明略)。然后将该位置上应该放置的数字位置找到,区间反转即可,这样可以保证顺序序列增加一个数字,使字典序最小。Accepted Code#include <bits/stdc++.h>#define int long longusing names原创 2022-02-16 01:01:00 · 230 阅读 · 0 评论 -
CF1638E. Colorful Operations 珂朵莉树+差分树状数组
CF1638E. Colorful Operations 珂朵莉树题意给定长度为nnn的序列,初始所有元素置000。要求支持以下三个操作:Color(l, r, c):将区间[l,r][l, r][l,r]区间染色为ccc;Add(c, x):将颜色为ccc的元素全部+x+x+x;Query(i):查询第iii个元素的值。思路含有多次区间赋值区间赋值操作,首先考虑珂朵莉树维护序列染色。那么首先需要大喊(雾)珂朵莉是世界上最幸福的女孩!!!首先建立颜色序列并初始化为000,然后对于每个原创 2022-02-15 20:33:01 · 788 阅读 · 0 评论 -
[SG函数] LightOJ.Partitioning Game
有nnn堆石子,每回合可选择把其中一堆分成数量不同的两堆,且必须分一次。不能再分的玩家输。初始状态下的必输态:sg[0]=sg[1]=sg[2]=0sg[0] = sg[1] = sg[2] = 0sg[0]=sg[1]=sg[2]=0,然后枚举每种分堆方式打SG表即可。注意,在求MEX的时候别用带log的数据结构(比如std::set),会超时…#include <bits/stdc++.h>//#define int long longusing namespace std;c原创 2022-02-13 20:25:17 · 295 阅读 · 0 评论 -
[SG函数]Split Game(2020江西省大学生程序设计竞赛)
一开始有一个n×mn \times mn×m的纸,之后随着游戏的进行,会得到多张不同大小的网格纸,这样就可以记一张纸为一个游戏,各个游戏构成一个游戏的和。其中每一个游戏都是一个有向图游戏,不过我们要自己找到不能行动的局面。显然1∗21*21∗2与1∗31*31∗3(2∗12*12∗1和3∗13*13∗1同理)无法再次分割,且其他矩形均可以分割成这两者之一,因此选取这两个局面作为必败局面。对于一张N×MN \times MN×M的矩形网格纸,我们可以枚举如何行动,然后得到两个子游戏,对两子游戏SGSGSG值原创 2022-02-13 19:25:40 · 2510 阅读 · 1 评论 -
[SG函数] 2021牛客寒假集训营6 H.寒冬信使2
传送门:H-寒冬信使2_2022牛客寒假算法基础集训营6 (nowcoder.com)思路首先回顾公平组合博弈的P点和N点:所有终结点是必败点(P-Position)从任何必胜点(N-Position)操作,至少存在一种方法进入必败点(P-Position)无论如何操作,从必败点只能进入必胜点(N-Position)那么我们开始分析本题目:采用二进制枚举的方式,用000代表bbb,111代表www,这样可以枚举一定长度内所有的组合。对于每一个状态,枚举能否进入必败态(初始必败态为000原创 2022-02-13 15:55:46 · 371 阅读 · 0 评论 -
2022牛客寒假算法基础集训营5 E.复苏小孩 详解
题目描述获得鬼手后,九峰成功让鬼眼,无头鬼影,鬼手三者形成了奇妙的平衡,短时间内不用担心厉鬼复苏,且可以使用厉鬼的力量。但想要让三者保持平衡,必须按照一定的规律轮流使用各部分的力量,于是九峰向神秘的人皮纸询问得到了以下结果:“我叫九峰,当你看到这句话的时候我已经…虽然目前三个鬼暂时形成了平衡,但这样下去我仍然撑不过几个月,我需要按照一定的顺序分别使用它们的力量才可以存活,经历无数次推算,我终于找到了这个顺序:(一个仅包含数字123的字符串)”,众所周知人皮纸会把正确的信息显示出来,但也有可能对这个字符串原创 2022-02-11 21:10:04 · 741 阅读 · 0 评论 -
2022牛客寒假算法基础集训营5 ADEGIJ
罚坐场A.疫苗小孩可以三种做法来写:Sol.1 二分111针和000针的贡献都为000,那么固定必打111针以上,枚举这一针的位置pospospos(看作第二针),然后二分找到离pos−kpos - kpos−k和pos+kpos + kpos+k最近的点,然后讨论计算贡献即可。注意二分的边界,写丑了就挂了。。。#include <bits/stdc++.h>#define int long longusing namespace std;const int N = 1e.原创 2022-02-10 23:36:52 · 354 阅读 · 0 评论 -
2022牛客寒假算法基础集训营4 ABCDEFGHIJK
A.R思路她想取一个连续子串,该子串包含至少kkk个'R'字符,且不能包含'P'字符。很裸的双指针,枚举每个右端点,找到最后一个符合条件的左端点后计数即可。Accepted Code#include <bits/stdc++.h>#define int long long using namespace std;string s;inline void solve(){ int n, k, ans = 0; cin >> n >> k >原创 2022-02-08 21:37:46 · 787 阅读 · 0 评论 -
2022牛客寒假算法基础集训营3 ABCDEGIJL
A.智乃的Hello XXXX思路没有思路Accepted Code#include <bits/stdc++.h>#define int long longusing namespace std;inline void solve(){ cout << "hello chino" << endl;}signed main(){ solve(); return 0;}B.智乃买瓜思路对每个数字进行拆解,并在拆解过程中原创 2022-01-29 01:00:45 · 913 阅读 · 0 评论 -
2022牛客寒假算法基础集训营2 G.小沙的身法 LCA 树上前缀和
思路注意模拟样例的时候不要把询问读成连边。。。LCA板题,维护树上前缀和,按照题目要求先跳到uuu再跳到vvv,再调到地上。向高处跳需要消耗高度差的体力,向低处跳不消耗体力。那么需要分三段进行计算:地→a\rightarrow a→a:需要消耗高度aaa的体力。a→ba \rightarrow ba→b:求树上路径,首先从aaa点跳到LCA(a,b)LCA(a, b)LCA(a,b),需要消耗sum[a]−sum[lca]sum[a] - sum[lca]sum[a]−sum[lca],然后从L原创 2022-01-28 11:12:51 · 1272 阅读 · 0 评论 -
2022牛客寒假算法基础集训营2 B.小沙的魔法 并查集
概述nnn个点mmm条边的图上,每个点的初始权值为000。给定一个边集,每次可以进行两种操作:在mmm条边里选择一条边加入图中;将图上某一连通块的所有点权+1+1+1.求最小操作数,使得图上点权xi=aix_i = a_ixi=ai。首先考虑如何减少操作数:也就是如何减少无意义的分次加点权。如果对于两个点权a,b(a>b)a, b(a > b)a,b(a>b),显然我们可以将一个点的点权增加至(a−b)(a - b)(a−b),然后将两个点合并起来加点权,这样可以刚好将两原创 2022-01-27 22:09:00 · 1049 阅读 · 0 评论 -
2022牛客寒假算法基础集训营2
文章目录A.小沙的炉石思路Accepted CodeB.小沙的魔法[并查集 待补]C.小沙的杀球思路Accepted CodeD.小沙的涂色[待补]E.小沙的长路思路Accepted CodeF.小沙的算数思路Accepted CodeG.小沙的身法[待补]H.小沙的数数思路Accepted CodeI.小沙的构造思路Accepted CodeJ.小沙的Dota[线段树+DP 待补]K.小沙的步伐思路Accepted CodeL/M.小沙的Remake[待补]A.小沙的炉石思路有nnn张法术进攻牌,每原创 2022-01-26 23:52:23 · 878 阅读 · 2 评论 -
2022牛客寒假算法基础集训营1 ABCDEFGHIJKL
A.九小时九个人九扇门思路首先观察数根的性质,令R(x)R(x)R(x)表示数字xxx的数字根,那么有R(a)+R(b)=R(a+b)R(a) + R(b) = R(a + b)R(a)+R(b)=R(a+b),根据这个性质:设dp[i][j]dp[i][j]dp[i][j]表示前iii个人可以组合出jjj的方案数第iii个人被加入方案时:第i−1i-1i−1个人组合出jjj的状态下可以向第iii个人组合出j+R(a[i])j + R(a[i])j+R(a[i])的状态转移,也就是dp[i]原创 2022-01-25 18:06:53 · 514 阅读 · 0 评论 -
AtCoder Beginer Contest 236 ABCD签到
A.chukodai拼手速#include <bits/stdc++.h>using namespace std;inline void solve(){ string s; cin >> s; int a, b; cin >> a >> b; for(int i = 0; i < s.size(); i++){ if(i == a - 1) cout << s[b - 1];原创 2022-01-23 23:48:29 · 322 阅读 · 0 评论 -
2020 China Collegiate Programming Contest - Mianyang Site D.Defuse the Bombs 二分答案
题目分析题目大意:给定一个炸弹爆炸的时间序列,每次操作可以选择一个炸弹,使其爆炸时间延长1S1S1S,在完成该操作后,所有的炸弹的爆炸时间缩短1S1S1S。当某个炸弹的爆炸事件缩短至−1S-1S−1S时,该炸弹立即爆炸。思路分析:考虑贪心操作。即每次都选取最小爆炸时间的炸弹,对其爆炸时间进行延长。可以发现对于每个操作次数numnumnum,对于初始爆炸时间序列a[i]a[i]a[i]统计负差值和。这个负差值和即为对于当前操作次数,如果保证所有炸弹不爆炸所需要的最小操作次数。那么根据这个思路,我们可以直接原创 2021-11-17 16:55:05 · 359 阅读 · 0 评论 -
2021-2022 ACM-ICPC Brazil Subregional Programming Contest H.Handling the Blocks 思维
题目分析题目大意:给定一个序列包含NNN个块,每个块有一个编号和颜色。初始状态下整个序列的编号无序。每次操作可以交换两个相同颜色的块,求是否能经过有限次交换,使序列顺序递增。思路分析:首先需要明确两个点:序列中所有块的编号按照111~NNN编号,最终如果能够达到有序状态,则每个块的位置和编号对应相等;同一颜色的块集合内部可实现任意交换,即每个块能到达任何位置;不同颜色的块无法通过任何交换方式实现块交换。因此,我们只需要对数据排序,判断排序前位置为iii的块和排序后位置为iii的块颜色是否相同,原创 2021-11-05 15:00:34 · 796 阅读 · 0 评论 -
2018 Petrozavodsk Winter Camp, Yandex Cup G. Piecewise Linearity 数学
占坑原创 2021-11-03 23:51:31 · 220 阅读 · 0 评论