
ACM刷题题解
文章平均质量分 69
用于本身的理解,与熟悉
zijiang.yang
没什么意思的人!
展开
-
acwing 最大异或对
代码:#include <string.h>#include <algorithm>#include <iostream>#include <unordered_map>#include <vector>using namespace std;int a[100005], vnode[1600005][2];class Tiretree { public: Tiretree() : vcnt(0) { memset(vnod原创 2021-12-20 20:02:38 · 239 阅读 · 0 评论 -
Educational Codeforces Round 103 (Rated for Div. 2) D Journey
随便水篇题解:定义一个dp[i][2]dp[i][2]dp[i][2]数组dp[i][0]dp[i][0]dp[i][0]代表从iii点向右最多能走多少个城市dp[i][1]dp[i][1]dp[i][1]代表从iii点向左最多能走多少个城市显然我们向右走时如果是 RLRLRL 交替形式呢么能一直走下去,并且也可以原路返回我们向左走时如果是 LRLRLR 交替,也可以一直走下去,并且原路返回样例:LRRRLL绘制成图:0<−−1−−>2−−>3−−>4<−原创 2021-01-30 11:36:52 · 1364 阅读 · 0 评论 -
训练 CF 1700分 题解
CodeForces264BCodeForces 264BCodeForces264B GoodSequencesGood SequencesGoodSequences思路:质因数分解后,求当前数的质因数种出现的最大次数,然后当前数的所有质因数赋值当前的最大,进行dpdpdp即可,时间复杂度 O(nlogn)O(nlogn)O(nlogn)/* * @Author: vain * @Date: 2020 * @LastEditTime: 2020-10-06 13:40:49 * @Last原创 2020-10-22 08:32:17 · 421 阅读 · 0 评论 -
codeforces 833A
题解:(kn)(k^n)(kn)3^33=a∗ba*ba∗b,呢么判断 int(pow(a∗b,1.0/3.0))3int(pow(a*b,1.0/3.0))^3int(pow(a∗b,1.0/3.0))3 = a∗ba*ba∗b 以及 aaa%knk^nkn = 000,bbb%knk^nkn = 0 即可,因为 nnn 轮,每轮必∗k*k∗k,故需要判断 knk^nkn 对 a,ba,ba,b是否合法。参考代码:#include<iostream>#include<vector原创 2020-10-18 16:12:36 · 188 阅读 · 0 评论 -
A. Guest From the Past 贪心
题目:给 nnn 元钱,然后有塑料瓶的牛奶 aaa 元钱,玻璃瓶的牛奶 bbb 元钱,玻璃瓶可以卖 ccc元钱。问 nnn 元钱最多喝多少瓶牛奶。思路:如果一种样式的牛奶贡献大,那我们就一直喝这个到不能在喝为止,剩下的钱看看还能否喝其他种的牛奶即可,呢么存在两种情况,全喝 aaa 牛奶,剩余的钱只能喝 bbb,反则全喝bbb,剩下的钱全喝 aaa 即可。参考代码:#include<iostream>#include<vector>#include<ctime>原创 2020-10-15 09:42:55 · 152 阅读 · 0 评论 -
E - Two Platforms
题意不再赘述,思路可以用前缀后缀最大值来写,用一个l[i]l[i]l[i],代表前缀为iii最多取多少球,r[i]r[i]r[i]代表后缀为iii最多为取多少球,枚举l[i]+r[i+1]l[i]+r[i+1]l[i]+r[i+1]的最大值即可,这样已经避免区间覆盖。参考代码/* * @Author: vain * @Date: 2020 * @LastEditTime: 2020-10-01 15:29:52 * @LastEditors: sueRimn * @Description: 学原创 2020-10-01 15:34:42 · 153 阅读 · 0 评论 -
2020 ccpc 网络赛1002 Graph Theory Class(分段打表+区间筛)
思路:用区间筛素数对1−1e101-1e101−1e10区间的素数进行分段打表,每一段分5e65e65e6长度,记录每一段区间的区间和,然后就按照规律来即可。参考代码:/* * @Author: vain * @Date: 2020 * @LastEditTime: 2020-09-24 14:40:46 * @LastEditors: sueRimn * @Description: 学不会 dp 的 fw * @FilePath: \main\demo.cpp *///#includ原创 2020-09-24 16:59:38 · 339 阅读 · 0 评论 -
洛谷 2787 珂朵莉树(ODT)
数据被加强了,(ODT)(ODT)(ODT)无法水过这个题了,但我还是要写一写这个新学习的黑科技算法。这个算法,和spfaspfaspfa一样很香,但唯一不同点是,spfaspfaspfa众所周知,而珂朵莉树(ODT)(ODT)(ODT)鲜为人知,他们过随机数据都十分快。(ODT)(ODT)(ODT)是基于stlstlstl里面的setsetset来实现的,通过一个平推操作,使复杂度快速下降,平推操作可以使setsetset容器中的数量快速下降,从而做到近似O(n)O(n)O(n)的时间复杂度,在空间上原创 2020-09-23 16:26:42 · 678 阅读 · 0 评论 -
P2325 [SCOI2005]王室联邦 (树上分块)
题意:给你1−n1-n1−n个城市,然后这个城市是一个树图,求能否将这n个城市划分成至少B<=s<=3BB<=s<=3BB<=s<=3B的一个省,并且这些从这些城市到省会的路径上只能存在本省的城市。思路:利用树分块,先将子树的节点划分,如果存在大于B的一块,就划分为树块,uuu为省会,可以证明最后没有被划分的数块树量最大为BBB,而被划分的树块的最大树量是2B−12B-12B−1。参考代码:/* * @Author: vain * @Date: 2020原创 2020-09-17 19:00:41 · 235 阅读 · 0 评论 -
hdu4811-Ball(2013ACM/ICPC亚洲区南京站现场赛)
思路:分情况讨论:当min(R,Y,B)>1min(R ,Y ,B)>1min(R,Y,B)>1,一种结果,然后考虑,(R,Y,B)(R,Y,B)(R,Y,B)只有一个为111,(R,Y,B)(R,Y,B)(R,Y,B)只有两个为111,(R,Y,B)(R,Y,B)(R,Y,B)三个都为111,然后考虑,(R,Y,B)(R,Y,B)(R,Y,B)只有一个为000的情况,两个为000的情况,全都为000的情况。恶心的模拟:参考代码:/* * @Author: vain * @D原创 2020-09-12 20:14:57 · 169 阅读 · 0 评论 -
9.5训练赛 D: Gym 102152B
思路:差分对区间进行O(n)O(n)O(n)处理标记区间,分块取出每一块的数量和边界rrr,对每一块的数量进行排序,二分出符合x询问的边界值,建立线段树对该区间进行最大值询问。注意:写线段树时,注意n=0n=0n=0 的情况参考代码:/* * @Author: vain * @Date: 2020-08-26 11:58:46 * @LastEditTime: 2020-09-06 10:33:18 * @LastEditors: sueRimn * @Description: In Us原创 2020-09-06 10:42:07 · 172 阅读 · 0 评论 -
2013ACM/ICPC亚洲区南京站现场赛 Wall Painting
题意:给一个长度为nnn的序列,求所有数据1...n1...n1...n任意组合异或累加的答案,不考虑顺序对于111,我们只需要求序列的和,对于222我们可以找所有两个异或的答案累加,不考虑顺序。思路:将每个数处理为2进制串,然后依次枚举二进制串上的每一位,然后利用组合数学求所有异或答案为1的可能,然后乘上kms(2,j),jkms(2,j),jkms(2,j),j代表二进制串上的位数c++不知道为什么TLETLETLE,g++可过参考代码:/* * @Author: vain * @Da原创 2020-09-04 23:01:36 · 271 阅读 · 0 评论 -
HDU 4821 字符串哈希+尺取+map操作
题意:给两个正整数M,LM,LM,L,分别代表取MMM个长度为LLL的字符串,然后给任意长度的字符串,问:可以得到多少个由MMM个长度为LLL的不同字符串组成的recoverablerecoverablerecoverable。思路:用字符串哈希预处理字符串,然后枚举1...L1...L1...L里的点,以其做为起点,来处理字符串哈希值,然后用mapmapmap进行统计长度为M∗LM*LM∗L的字符串是否合法的数量,进行尺取操作即可。参考代码:/* * @Author: vain * @Dat原创 2020-09-04 10:03:57 · 223 阅读 · 0 评论 -
HDU多校第十场补题
1003:MineSweeper1003:Mine Sweeper1003:MineSweeper随机思路:可用srand()随机化坐标暴力跑点过,但是运气特别不好就可能会TLETLETLE,但存在一个概率问题,口胡一下可行性:对于一个25∗2525*2525∗25的图,我们按照一定要求跑数字和为SSS,跑出1,2,....1,2,....1,2,....小于121212左右的数的概率比较低,因为25∗2525*2525∗25组成这些数字和的图比较少,而数字越大,组成这个图的方案就越多,跑出来的概率就原创 2020-08-21 11:15:10 · 424 阅读 · 0 评论 -
状压dp:方格取数(1),互不侵犯
方格取数(1):题意给你N∗NN*NN∗N矩阵,每一个位置有一个非负数吗,我们可以取任意多个数,但这些数不能相邻,问能取的最大数是多少?(0<N<21)(0<N<21)(0<N<21)思路:理解炮兵阵地后,这个题就变的十分简单了,我们可以先处理出长度为nnn的合理状态,并求出这个合理状态的累加和,然后初始化第一行dp[1][i]dp[1][i]dp[1][i]代表第一层所有状态的答案,然后就从第二层开始进行状态的枚举即可,特别判断一下stk[j]stk[j]stk[原创 2020-08-20 10:58:40 · 217 阅读 · 0 评论 -
Leetcode 202场周赛题解
5185.5185.5185. 存在连续三个奇数的数组思路:枚举连续个数为三的即可参考代码:class Solution {public: bool threeConsecutiveOdds(vector<int>& arr) { int ans=0; for(int i=0;i<arr.size();i++) { if(arr[i]&1) ans++; el原创 2020-08-16 14:02:28 · 182 阅读 · 0 评论 -
Codeforces Round #664 (Div. 2)A-D题解
A−BoboniuA - BoboniuA−Boboniu LikesLikesLikes tototo ColorColorColor BallsBallsBalls思路:可以知道r,b,g,wr,b,g,wr,b,g,w中的奇数数量不大于1,就可以构造回文序列,若奇数数量大于1,我们只需要一次判断即可,因为修改后的r,g,b,wr,g,b,wr,g,b,w若可以成功就可以成功,反则它每次修改后每个数都 ±奇数,会形成奇数偶数数量互补的情况,整体奇数和偶数的数量不会改变。参考代码:#include原创 2020-08-14 18:06:39 · 222 阅读 · 0 评论 -
Fluctuation Limit
思路:#include <cstdio>#include <algorithm>#include <iostream>#include <vector>#include <map>#include <queue>#include <set>#include <ctime>#include <cstring>#include <cstdlib>#include <原创 2020-08-14 10:52:26 · 146 阅读 · 0 评论 -
Codeforces Round #663 (Div. 2) A-D
A:SuborraysA: SuborraysA:Suborrays思路:x∣y>=max(x,y)x|y>=max(x,y)x∣y>=max(x,y),线性输出即可。参考代码:#include <cstdio>#include <algorithm>#include <iostream>#include <vector>#include <map>#include <queue>#include原创 2020-08-10 13:22:27 · 539 阅读 · 1 评论 -
CodeForces 1393C Pinkie Pie Eats Patty-cakes
PinkiePinkiePinkie PiePiePie EatsEatsEats Patty−cakesPatty-cakesPatty−cakes思路:自我感觉这题比B简单,它的目的是让连续不同的尽可能的最小值最大,呢么我们就利用出现最多的当作隔板,看能把这个序列最大分成几段,显然这个中间段就算最大的,不然挤在一起,中间段肯定存在比当前小的。参考代码:#include <cstdio>#include <algorithm>#include <iostream&原创 2020-08-08 14:35:24 · 1742 阅读 · 0 评论 -
CodeForces 1393B Applejack and Storages
ApplejackApplejackApplejack andandand StoragesStoragesStorages由于本菜鸡很笨,并没有想到什么简单的思路,所以只能用权值线段树水过,u1s1我的思维确实垃圾思路:利用权值线段树求区间第k小,首先我们只需要知道三个变量(最大相同数量dmdmdm,次大相同数量dsdsds,次次大dkdkdk),那么就可以写了,显然这题你用排序肯定不行了,那样最坏时间复杂度是O(qlog(q+n))O(qlog(q+n))O(qlog(q+n)),显然会TLE,那原创 2020-08-08 13:27:27 · 365 阅读 · 0 评论 -
Codeforces Round #661 (Div. 3)
A:RemoveA:RemoveA:Remove SmallestSmallestSmallest思路:排序后,若有区间差大于一的,则输出“NO”“NO”“NO”,反则输出“YES”“YES”“YES”参考代码:#include <cstdio>#include <algorithm>#include <iostream>#include <vector>#include <map>#include <queue>#原创 2020-08-06 11:52:09 · 526 阅读 · 0 评论 -
Codeforces Round #628 (Div. 2)
A−EhA - EhA−Eh AbAbAb AnAnAn DDD gCdgCdgCd思路:显然111与任何数的gcdgcdgcd为111,与任何数的lcmlcmlcm都是两数中最大的,呢么直接构造1,x−11,x-11,x−1便是答案。参考代码:#include <cstdio>#include <algorithm>#include <iostream>#include <vector>#include <map>#includ原创 2020-08-02 18:16:04 · 181 阅读 · 0 评论 -
HDU 多校联赛第四场 Deliver the Cake
由于之前不会堆优化版本的dijstradijstradijstra,只会spfaspfaspfa算法,然后补题的时候想着用spfaspfaspfa算法过,没想到被卡了,所以去学了一手dijstradijstradijstra这里讲一下两种算法的时间复杂度:spfa:spfa:spfa:核心思想 bfsbfsbfs,时间复杂度,不好证明,这算法写起来挺简单的,跑随机图飞快,但出题人刻意卡的话,那这个算法就不行了。dijstradijstradijstra: 核心思想贪心,时间复杂度On(logn)On(原创 2020-08-01 23:06:38 · 226 阅读 · 0 评论 -
Codeforces Round #660 (Div. 2)
A:思路:用 6 10 14 15 去构造答案,因为只用前三个构造可能会出现重复的参考代码:#include <cstdio>#include <algorithm>#include <iostream>#include <vector>#include <map>#include <queue>#include <set>#include <ctime>#include <cstr原创 2020-07-31 12:14:32 · 377 阅读 · 0 评论 -
codeforce div2 1389 A-C题解:
A:思路:枚举一下lll的倍数查看是否存在有解区间即可,当然l∗k<=rl*k<=rl∗k<=r参考代码:#include <cstdio>#include <algorithm>#include <iostream>#include <vector>#include <map>#include <queue>#include <stack>#include <set>#原创 2020-07-30 11:04:14 · 408 阅读 · 0 评论 -
HDU 第三场Parentheses Matching
思路:按题目会给出一个字符串,呢么我们先将给出的字符串进行匹配,最终剩下没有匹配的字符串,除去’*‘号,最左边的可能就是’)’,最右边的可能就是’(’,为什么说可能,因为可能一边没有,但是也没有匹配。举个例子:首先左右括号不可能区间相交,所以我们只需要记录每个括号的左边或者右边 * 号数量是否够即可,然后对于)取最早出现的 *,取完为止,若*号的数量少于未匹配的一种括号数量显然是不匹配的,我们只需要对两种括号进行检查即可,最后对原字符串赋值即可。参考代码:#include <cstdio&原创 2020-07-29 10:38:28 · 260 阅读 · 0 评论 -
codeforce div2 A-C练习题题解
A. k-Factorization题意给两个数一个n和k,将n分解成k个数的乘积,这k个数可重复,但最小值大于1。思路:对n分解质因数,如果分解的数量小于k输出-1,反则输出分解的k个数,时间复杂度O(logn2)O(logn^2)O(logn2)。参考代码:#include <cstdio>#include <algorithm>#include <iostream>#include <vector>#include <map>原创 2020-07-28 11:03:50 · 379 阅读 · 0 评论 -
Codeforce 1385 A-D+视频讲解
codeforce div3 A-D A:签到#include <cstdio>#include <algorithm>#include <iostream>#include <vector>#include <map>#include <queue>#include <set>#incl...原创 2020-07-18 17:11:45 · 235 阅读 · 0 评论 -
P4151(线性基)最大异或和路径+视频讲解
细节在视频中: P4151洛谷最大异或和路径 参考代码:#include <cstdio>#include <algorithm>#include <iostream>#include <vector>#include <map>#include <queue>#include <set>原创 2020-07-16 16:20:06 · 290 阅读 · 1 评论 -
线性基学习 洛谷:P3812 模板(线性基)
线性基:#include <cstdio>#include <algorithm>#include <iostream>#include <vector>#include <map>#include <queue>#include <set>#include <ctime>#include <cstring>#include <cstdlib>#include原创 2020-07-16 10:18:10 · 444 阅读 · 0 评论 -
HDU 2859 DP (求最大对称子矩阵)
题意给一个 N∗NN * NN∗N 的字符串矩阵,求出最大对称子矩阵,对称轴从左下角-->右上角思路:参考代码:#include <cstdio>#include <algorithm>#include <iostream>#include <vector>#include <map>#include <queue>#include <set>#include <cstring>原创 2020-07-13 16:20:37 · 479 阅读 · 0 评论 -
第197周 leetcode题解
今天上午比赛只写了前三题,所以第一个视频只含前三题: leetcode 197场题解 第四题:爬山算法/退火算法爬上算法:在平面区间内找点,然后更新优的点,进行不断缩小屏幕,找到满足精度的值参考博客参考代码:class Solution {double x[60],y[60];int n;double sum(double px,double py){ doub原创 2020-07-12 21:44:09 · 368 阅读 · 0 评论 -
leetcode 1300. 转变数组后最接近目标值的数组和(前缀和+二分)
给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近 target (最接近表示两者之差的绝对值最小)。如果有多种使得和最接近 target 的方案,请你返回这些整数中的最小值。请注意,答案不一定是 arr 中的数字。示例 1:输入:arr = [4,9,3], target = 10输出:3解释:当选择 value 为 3 时,数组会变成 [3, 3, 3],和为 9 ,这是最接近原创 2020-06-14 11:29:48 · 267 阅读 · 0 评论 -
leetcode 739 每日温度(单调栈)
请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。思路:用栈的栈顶坐标来表示最大值的坐标,从而得原创 2020-06-12 12:09:51 · 307 阅读 · 0 评论 -
leetcode 238. 除自身以外数组的乘积
给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组原创 2020-06-04 10:32:09 · 189 阅读 · 0 评论 -
leetcode 1438. 绝对差不超过限制的最长连续子数组
传送门:题意:给长度为 n 的序列 和 限制值 k,求最长的子区间,子区间满足区间中任意两个数的差的绝对值不大于k思路:双单调队列,一个维护当前区间最大,一个维护当前区间最小,如果当前区间最大-最小满足条件,呢么当前区间整体满足条件,否则让单调队列中的除去当前存在的左端点即可参考代码:class Solution {int ans;int q1[100005], q2[100005], a[100005];void solv(int n, int k){ int head1原创 2020-05-09 22:06:10 · 910 阅读 · 0 评论 -
bbb的快读模板
ios对cin的加速欺骗了我,md数据量稍微大一点就TLE了,不太靠谱,搞一波bbb群主的快读板子,用于对付卡常用,虽然一般感觉用不到叭,sacnf够用了,但搞上一波没啥坏处using namespace std;typedef long long ll;#define repi(i,b,e) for (int i = (b), _ = (e); i < _; ++i)#define rep(i,b,e) for (int i = (b), _ = (e); i <= _; ++i)原创 2020-05-08 21:55:57 · 1843 阅读 · 2 评论 -
文艺平衡树(Fhq Treap)
传送门:文艺平衡树首先要阐述一点,Fhq Treap的按大小分裂是支持区间操作的,而按值分裂是不支持区间操作的。Fhq Treap的分裂方式:按权值分裂按大小分裂按权值分裂:根据插入点的权值,将树按w为边界,分裂为两颗树,一颗树的权值大于w,一棵树的权值小于等于w,这样再把新节点合并进去,就可以维护树的平衡按大小分裂:根据插入点的节点大小,将树按big为边界,分裂为两颗树...原创 2020-05-07 22:07:35 · 1563 阅读 · 2 评论 -
AtCoder 4351前缀和+二分+求顺序对数
题意:给一个长为N的序列,求出所有子区间中位数组成的新序列的中位数思路:首先我们需要找到这个题的可二分性:我们可以知道中位数的性质:在序列中,比中位数小的个数有差不多N/2个,呢么比中位数大的差不多也有N/2个,由此我们找到了可二分性,所以我们就可以二分答案得到序列中所有中位数比mid大的区间个数:(1)(1)(1) 首先利用前缀和处理数组,将不小于mid的赋为1,其余赋为-1...原创 2020-05-05 11:14:29 · 317 阅读 · 0 评论