01 2024 档案

摘要:原题链接 前情提要 限于自身知识水平的储备不足,无法对这道题的贪心算法做出一个证明,待来日学识渐长把这个证明写下 题解 我们可以把字符串s分成若干区间,每一区间对应一位数字的储备 已知长度为n,那我们就一位一位地遍历,一旦所有元素遍历齐就开始下一位的遍历,因为再往后遍历也不起作用 然后取每一位最后一 阅读全文
posted @ 2024-01-28 23:05 纯粹的 阅读(18) 评论(0) 推荐(0) 编辑
摘要:原题链接 忠告1:要学会计算时间复杂度!! 忠告2:要学会抓事实,不要掉进题目直观模拟的陷阱里 事实 1.任意k个数的 gcd 一定可以是这k个数的最小值,这里以 k=3 举例 假设 gcd(a1,a2,a3)=m ,则 \(a_1=k_1m,a_2=k_2m,a_3= 阅读全文
posted @ 2024-01-28 17:25 纯粹的 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原题链接 如何得到思路 1.我们不能模拟题目的意思去做,因为那样会超时(别问我怎么知道的)。我们要抓住一些事实 2.对于任意序列想要得到最小值,可以只有两种分法: 一连串和为零的序列 长度为1的序列 3.最长的和为零的序列长度必为2min(a,b),其中ab分别代表01的个数,剩余的序列无 阅读全文
posted @ 2024-01-27 16:30 纯粹的 阅读(16) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 最近做的题目有点多,感觉没什么好讲的,某个最大值一定是由连续区间上的节点操作后得来的 Code #include<bits/stdc++.h> using namespace std; int f[105][105][2]; int main() { memset(f,-0x 阅读全文
posted @ 2024-01-27 12:48 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.拆环成链 2.最后一颗留下来的珠子一定是的头标记一定是某个原珠子A的头标记,尾标记一定是珠子A右边n个单位的珠子的尾标记 3.对任意最大值而言,最后一颗一定是某两个珠子的合并后产生的,所以我们可以在区间内断点遍历 Code #include<bits/st 阅读全文
posted @ 2024-01-27 11:59 纯粹的 阅读(16) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解1: Code1 #include<bits/stdc++.h> using namespace std; int a[255]={0}; int f[255][255]={0}; int main() { int n,ans=0; cin>>n; for(int i=1;i< 阅读全文
posted @ 2024-01-26 23:10 纯粹的 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原题链接 方法一 看到区间和,自然想到前缀和 用双指针维护 code #include<bits/stdc++.h> using namespace std; int main() { int n; cin>>n; vector<int> pres(n+5); pres[0]=0; for(int 阅读全文
posted @ 2024-01-26 15:24 纯粹的 阅读(16) 评论(0) 推荐(0) 编辑
摘要:原题链接 前记 1.环的问题可以转换成遍历以所有元素开头的链 2.对于某一条链,其最大值等于中间某两段最大值的乘积,这样就把大问题转换成了小问题 细节请看代码 #include<bits/stdc++.h> #define ll long long using namespace std; ll p 阅读全文
posted @ 2024-01-26 13:39 纯粹的 阅读(40) 评论(0) 推荐(0) 编辑
摘要:1.你是怎么想到这样做的? 2.哪些地方是本题的核心?你是如何处理的? 3.有哪些细节需要注意 阅读全文
posted @ 2024-01-26 12:16 纯粹的 阅读(20) 评论(2) 推荐(0) 编辑
摘要:原题链接 思路简述 二维差分+矩阵旋转 思路详述 1.二维差分,对于每一个标签而言,有对一维的影响和二维的传递之分 2.为什么要差分?对于每一个目标而言,它对以其为左上角顶点,k为边长的三角形内的点都有一个贡献,这种范围内的累加就考虑用前缀和(这里是二维差分) 3.为什么要矩阵旋转?由于在某个点喷的 阅读全文
posted @ 2024-01-25 19:05 纯粹的 阅读(14) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 首先考虑暴力,每次询问遍历一遍 k 最坏时间复杂度 O(qn)kn 时达到 所以考虑在 kn 时有没有替代方案 当 kn 时,d 很小,所以我们可以预处理 d 很小的情况,后缀和处理即可 阅读全文
posted @ 2024-01-25 13:36 纯粹的 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解,太抽象了 最优情况一定可以是这样: Code #include<bits/stdc++.h> #define ll long long using namespace std; ll a[200005]={0}; ll b[200005]={0}; ll l[200005]={0}, 阅读全文
posted @ 2024-01-24 22:20 纯粹的 阅读(27) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 太巧妙了 1.对于一个递增子序列个数为 sum ,元素值域为 [l,r] 的序列而言 在最右端插入一个 l1 ,对 sum 的影响是 +1 r+1 ,对 sum 的影响是 2 由于乘二加一可以在两百次操作内使 \(s 阅读全文
posted @ 2024-01-23 01:10 纯粹的 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.最笨的想法,链表,每次在还没被杀死的怪物里遍历一遍,如果被杀死了就从链表中删除这个节点 但是TLE on #7 2.进阶想法,仍然是链表,我们想,如果有些怪物永远都不会被杀死,那我们就没必要遍历它。所以我们从可能被杀死的怪物中遍历 如果一个怪物这个回合被杀死,但是在上个回合中没有 阅读全文
posted @ 2024-01-22 21:08 纯粹的 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原题链接 分析 1.如果某次操作之后,数组的长度大于等于k,我们把这样的操作叫最后操作,且最后操作之后的操作都不用考虑,因为不会影响前面的数组,我们把这样 2.最后操作只有两种,一种是加法,一种是乘法 如果是加法,那么k一定等于此时数组的长度,对应的值一定是这次加法加上去的值,也就是末尾值 如果是乘 阅读全文
posted @ 2024-01-17 20:06 纯粹的 阅读(16) 评论(0) 推荐(0) 编辑
摘要:原题链接 太巧妙了!! 关键1:把开着的灯当成黑点看待 关键二:如图 更多细节请看代码 code #include<bits/stdc++.h> using namespace std; int to[100005];//代表会被我影响的灯,抽象成边 void solve() { int n; in 阅读全文
posted @ 2024-01-17 15:32 纯粹的 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原题链接 题记 事实1.求谁能把谁吃掉 事实2.当dx为奇数时,如果非平局一定是alice吃掉bob,偶数同理 事实3.当吃掉事件发生时,两颗棋子的xy一定相同 事实4.由于已知谁会吃谁会被吃,被吃的棋子要使二者的dy尽可能的大,吃的棋子要使dy尽可能地小, 阅读全文
posted @ 2024-01-17 14:05 纯粹的 阅读(49) 评论(0) 推荐(0) 编辑
摘要:原题链接 小记 在一位高人的帮助下通过这题 主要是二分+双指针(聚焦型双指针?) 时间复杂度为O(tnlogn) 题解 二分这个k对应的值,对于每个二分出来的值,找出共有几个和小于它,核心如下: 如果恰好有a[l1]+a[r1]<x , 那么\(a[l_1]-a[i]<x,( 阅读全文
posted @ 2024-01-16 18:33 纯粹的 阅读(52) 评论(0) 推荐(0) 编辑
摘要:原题链接 反思,debug不出来就赶紧看题解把! 题解 双指针,双指针有好几种,这个是像弹簧(窗口)一样的双指针,右指针一直往右走,当成立时,左指针一直往左走直到不成立 code #include<bits/stdc++.h> using namespace std; int a[1000006]= 阅读全文
posted @ 2024-01-16 18:22 纯粹的 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原题链接 题记,一道思考加编写加优化耗时2h的题 1.核心:抵达终点的路途中,如果换自行车,一定是换一辆速度系数更小的车 2.从速度系数最小的城市出发,到达终点的cost等于其系数乘上到达终点的最小距离 3.从速度系数第二小的城市出发,到达终点的最小值一定是直接往终点走和先去速度系数最小的城市之后再 阅读全文
posted @ 2024-01-16 14:39 纯粹的 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原题链接 直接看代码 #include<bits/stdc++.h> using namespace std; int a[200005]={0}; int n; int check(int k) { int m=0;//任何数与零 的gcd都是其本身 for(int i=1;i<=n-k;i++) 阅读全文
posted @ 2024-01-15 19:39 纯粹的 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解1,种30棵树,每棵树代表每种颜色,树的每个节点代表这个颜色在对应区间上是否存在 code #include<bits/stdc++.h> using namespace std; int st[32][400005]={0}; int lazy[32][400005]={0}; vo 阅读全文
posted @ 2024-01-15 18:54 纯粹的 阅读(4) 评论(0) 推荐(0) 编辑
摘要:原题链接 code #include<bits/stdc++.h> using namespace std; #define ll long long ll a[100005]={0}; ll lazyadd[400005]={0}; ll lazymul[400005]={0}; ll tree[ 阅读全文
posted @ 2024-01-14 13:32 纯粹的 阅读(4) 评论(0) 推荐(0) 编辑
摘要:原题链接 题记 就是线段树,不过树和延迟标记有点绕 code #include<bits/stdc++.h> using namespace std; struct SegmentTree { vector<int> tree, lazy;//tree代表这个节点开着灯的数量,lazy代表这个节点是 阅读全文
posted @ 2024-01-10 00:28 纯粹的 阅读(7) 评论(0) 推荐(0) 编辑
摘要:待解决 阅读全文
posted @ 2024-01-09 00:42 纯粹的 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原题链接 前情提要,如果对期望的概念不清晰,请点击这里 我犯的错误:因为每条路只走一遍,而错误地判断每条路的概率相同 题解 1.对于任何一个节点来说,设其出边有len条,其子节点的期望长度为sum[j] 则该节点的期望长度为sum[j]len,根据 阅读全文
posted @ 2024-01-04 20:23 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解,O(1)做法 简述 先从两个骰子入手,得出[b+1,a+1]内的数出现次数最多 然后再加一个骰子相当于把分布图向右平移c个单位的过程中,每平移一个单位的长度累加和,也就是以c为宽的矩形方框的截面积 然后分类讨论,一定是把方框放在中间偏左位置是最优解 code #inc 阅读全文
posted @ 2024-01-04 16:18 纯粹的 阅读(21) 评论(0) 推荐(0) 编辑
摘要:原题链接 题目重点 1.有向图 2.跑的 路径 最少能被分割为几段长度为2k,因为每段路长度为1km 3.有自边 算法设计思考 1.在无背景、k=0的情况下,这题就是一个普通的dp(即floyd) 2.加上了约束条件,当某两个点的距离为2k时,可以在1s内到达 3.相当于 阅读全文
posted @ 2024-01-03 20:27 纯粹的 阅读(4) 评论(0) 推荐(0) 编辑
摘要:原题链接 一道经典树形dp,你会了二叉苹果树那么这个也会了 细节已写在代码里,一定要清楚设的变量和函数的含义 code #include<bits/stdc++.h> using namespace std; int s[305]={0}; vector<int> son[305]; int ans 阅读全文
posted @ 2024-01-03 14:18 纯粹的 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 好抽象啊,类背包问题,在增加一个根节点时,其最大值是由若干个子节点保留若干个树枝形成的 最关键的在于设二维数组把树枝的根数算在内,可能是因为以该节点为根节点的树保留q根树枝的最大值具有无后效性吧 而且答案需要用到其子节点保留q1,q2...(太抽象了) code #include<b 阅读全文
posted @ 2024-01-03 13:14 纯粹的 阅读(2) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 dp的核心在于,增加一颗根节点时,以其为根节点的ans=max(+r[new],max(,)) code #include<bits/stdc++.h> using nam 阅读全文
posted @ 2024-01-02 21:27 纯粹的 阅读(2) 评论(0) 推荐(0) 编辑
摘要:原题链接 题后感 码量也太大了吧 小记 题解网上有,但是有关这个lazytag我要提一嘴,我建议不要记它,你只需知道修改的区间没有整体破坏时,其内部的元素内容暂不做修改 code 码量真大 #include<bits/stdc++.h> #define ll long long using name 阅读全文
posted @ 2024-01-02 20:27 纯粹的 阅读(4) 评论(0) 推荐(0) 编辑
摘要:原题链接 方法1: 有点像剪枝。 i1~n循环,j同理,如果a[i]+b[j]放不进去,那么a[i]+b[j+1]也放不进去 code #include<bits/stdc++.h> using namespace std; int a[100005 阅读全文
posted @ 2024-01-02 18:48 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 首次尝试用chatgpt帮我写注释 code #include<bits/stdc++.h> using namespace std; int main() { int n; // 声明整数变量 n,用于存储输入序列的长度 cin >> n; // 读入序列长度 // 定义两个优先队列,q 阅读全文
posted @ 2024-01-02 16:35 纯粹的 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原题链接 读题 所有人的速度相同,也就是说,如果大家都在动,那么大家永不相交。所以相交的情况有且仅有b到终点了,而a还在b的后面,且a的终点在b的后面 将上述情况模型化后,就是求每个人行动的区间包含了多少人,然后对每个人求和 题解 再度简化,对于第i人来说,就是求r小于它且l 阅读全文
posted @ 2024-01-02 11:13 纯粹的 阅读(28) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解链接 code #include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { int n; cin>>n; if(n==1) { puts("1"); continue; } 阅读全文
posted @ 2024-01-02 10:26 纯粹的 阅读(28) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示