- 2024-12-212024/12/21课堂记录
目录绿色通道最大连续和绿色通道二分答案与单调队列的缝合怪二分答案的基础上,把dp优化,用单调队列检验其合理性代码很简单,真的就是把两个模板缝合在一起#include<iostream>usingnamespacestd;intdp[50005],a[50005],n,t;intq[50005];inthead,tail;consti
- 2024-12-06CF2050F Maximum modulo equality 题解
【题意简述】你有一个长度为\(n\)的数组\(a\)。每一次询问给定\(l,r\),寻找最大的\(m\)使得\(a_l\)到\(a_r\)的所有数对\(m\)同余,【前置数学芝士】首先是一个非常Naive的结论,请自行感性证明:设\(a>b\),\(a\)和\(b\)对\(a-b\)同余。理性证明:设\(p=a-b\),\(
- 2024-11-24题解:[P11311 漫长的小纸带]
P11311漫长的小纸带题意:有一个长度\(n\)的序列\(a\),将\(a\)分成若干段,使得所有段价值和最小,定义价值为一段内元素数量的平方。思路:显然能用动态规划来计算答案,设\(f[i]\)表示到第\(i\)个位置所获得的最小价值,考虑怎么转移。最直接的就是从\(1\)到\(i-1\)枚举断
- 2024-09-09E. Klee's SUPER DUPER LARGE Array!!!
原题链接题解发现随着\(i\)越大,绝对符号内的值越大,因此具有单调性,可以应用二分查找找离0最近的\(i\)而值可以用等差数列求和公式快速求出code#include<bits/stdc++.h>usingnamespacestd;/*mt19937_64rnd(time(0));#definedoublelongdouble#definelowbit(x)
- 2024-09-06F. Color Rows and Columns
原题链接题意每个矩形变成删除若干个行和列,每少一行或少一列就加一分,问加\(k\)分最少要删除几个格子?分析抽象开来,最后的答案的样子一定是第\(i\)个矩形加了\(s_i\)分因此,我们只需要求出每个矩形加\(s_i\in[0,a+b]\)分时最少需要删除几个格子,然后就可以背包型动态规
- 2024-09-06D. Sakurako's Hobby
原题链接题意每个数要么黑色,要么白色,每个数都有跳往下一个数,请问你最多能得到几个黑色数?分析前往下一个数具有很强的指示性,所以我们可以画一个有向图出来那么问题就变成了一个有向图,问图中的每个点最多能到达几个黑色的点?(只有一个出边)但是注意本题,由于是排列,每个点最多只有
- 2024-09-03AtCoder ABC 369题解
前言本题解部分思路来源于网络,仅供参考!A-369题目大意给定\(A\),\(B\)两个整数,求有多少个整数\(x\)使得可以通过某种排列使得\(A\),\(B\),\(x\)为等差数列。解题思路稍加分析即可得到:如果\(A=B\)则结果为\(1\)。如果\(A=B\)但\((A+B)\bmod
- 2024-08-31ABC369
Alink判断\(A\),\(B\)之间可不可以放一个数,如果可以就是\(3\)个,不行就是\(2\)个(左右),但是如果\(A\),\(B\)相等就只有一个。点击查看代码#include<bits/stdc++.h>usingnamespacestd;signedmain(){ inta,b; cin>>a>>b; intx=b-a; if(x!=0){ if(x%2==0
- 2024-08-29NOI2024
阅读理解题如果你发现签到题的代码难以实现,那往往是因为你理解错题意了即使你考0分,只要大家都考0分,你仍然可以成为第一名呀——虽然这很反常识点击查看代码#include<iostream>usingnamespacestd;inta[200005],b[200005];intmain(){ios::sync_with_stdio(fal
- 2024-08-26cats 的数据结构
相信OI美学点击查看代码#include<bits/stdc++.h>usingnamespacestd;vector<int>a[200005];intf[200005],s[200005],ansa[200005],ansb[200005];voiddp(intn1){s[n1]=1;f[n1]=n1;for(inti=0;i<a[n1].size();i++){dp(a[n1][
- 2024-08-25AtCoder ABC 368题解
前言本题解部分思路来自于网络。A-Cut题目大意有\(n\)张卡片叠在一起,从上到下给出\(n\)卡片的编号,将\(k\)张卡片从牌堆底部放到顶部后,从上到下输出卡片的编号。解题思路按照题意模拟即可。code#include<bits/stdc++.h>usingnamespacestd;inta[105];intmai
- 2024-08-24CodeForces - 1336A Linova and Kingdom
CodeForces-1336A就差一点点,很可惜,少发现个很显而易见的结论就是一个点的价值,实际上就是(这个点的深度-之后的点的数目)就是\(depth_i-size_i\)然后只要用dfs维护就好了然后把一个点的价值用STL优先队列放在一起,贪心完成。但是可能也算不上什么贪心,因为是很朴素的东西
- 2024-08-17[赛记] 暑假集训CSP提高模拟22 23
连通块66pts老套路,删边改加边;但改完以后不知道怎么求最长路径了,当时也想到了维护直径,但不知道咋干;具体地,用并查集维护连通性,每次合并时需要维护新的直径,不难发现,新的直径的两个端点一定在原来的两个直径的四个端点中选;于是只有六种情况,枚举一下即可;我们要直径有啥用呢?当我们
- 2024-08-16Codeforces Round 894 (Div. 3) D
题目:E.KolyaandMovieTheatre题目链接:https://codeforces.com/contest/1862/problem/E思路:主要用优先队列存放大于0的元素,然后除了第一个数据后的每m个数据就可以存放到记录数组里面,最后遍历找价值最大的点击查看代码#include<bits/stdc++.h>#defineintlonglongusing
- 2024-08-15[ABC351F] Double Sum
原题链接题解方法一:双重循环,\(O(n^2)\)方法二:顺序遍历\(i\),然后查找目前所有比\(a_i\)小的数,这是一个比较经典的树状数组的运用时间复杂度\(P(n\logA)\)考虑优化,由于\(A\)可以达到\(1e8\),而\(n\)只有\(4e5\),所以我们可以对数据做离散化处理code#include<bi