- 博客(140)
- 收藏
- 关注

原创 ~小结论~
逆序对:1~n排列 奇数次交换任意2元素个数为奇,偶数次交换个数为偶;若 a%m=b%m 则(a-b)%m==0长度至少为 5 的序列包含长度为 3 的非递减或非递增子序列卡特兰数 f[i]=f[i-1](4i-2)/(i+1)默慈金数 f[i]=((2*i+1)f[i-1]+3(i-1)*f[i-2])/(i+2)绕点的旋转公式:(例题:atcode Opposite)圆心(xm,ym)x=(x0−xm)∗cos(a)−(y0−ym)∗sin(a)+xmy=(x0-xm)∗sin(a)+(
2021-08-02 23:10:31
357
1
原创 134. 加油站
思维题,找出前缀和最小的点,从他后面一点(设为i)出发即可。pre[j]-pre[i-1]对于所有(i右边的点)j>=i来说,都为非负,所以说走的期间路过的数字和不会为负数。给定一个数组(是一个环),从某点出发向右走,走的期间路过的数字和不能为负数,问哪个点出发可以走完所有点。如果总和为负,则输出-1。
2025-07-11 18:30:39
145
原创 380. O(1) 时间插入、删除和获取随机元素
int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有 相同的概率 被返回。bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true;否则,返回 false。bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true;你必须实现类的所有函数,并满足每个函数的 平均 时间复杂度为 O(1)。考虑删除的时候把最后一个数换到当前要删除的位置。
2025-07-11 16:52:51
156
原创 274. H 指数
根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 h 篇论文,并且 至少 有 h 篇论文被引用次数大于等于 h。给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。由于研究者有 3 篇论文每篇 至少 被引用了 3 次,其余两篇论文每篇被引用 不多于 3 次,所以她的 h 指数是 3。解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 3, 0, 6, 1, 5 次。
2025-06-26 15:31:19
116
原创 45. 跳跃游戏 II
每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。贪心,找到当前能跳的那一段中,可以跳的最远的那个点,那个点一定更优。输入: nums = [2,3,1,1,4]解释: 跳到最后一个位置的最小跳跃数是 2。
2025-06-26 15:02:49
152
原创 122. 买卖股票的最佳时机 II
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。找到连续递增的一段,最低点买,最高点卖。
2025-06-26 14:26:56
116
原创 189. 轮转数组
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。输入: nums = [1,2,3,4,5,6,7], k = 3。向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]观察发现,可以以gcd(n,k)为循环。输出: [5,6,7,1,2,3,4]要求,时间复杂度On,空间复杂度O1。
2025-06-26 14:14:57
165
原创 169. 多数元素
给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。求众数,时间复杂度On,空间复杂度O1。
2025-06-26 13:40:52
147
原创 80. 删除有序数组中的重复项 II
解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。不需要考虑数组中超出新长度后面的元素。给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。分段考虑,1 1 1 1 2 2 2 2 3所有相同的视为一块进行处理。输出:5, nums = [1,1,2,2,3]输入:nums = [1,1,1,2,2,3]
2025-06-26 13:21:47
125
原创 7-1 凸多边形最优三角剖分
设dp[i][j]为i到j构成的多边形剖分后每条边只计算一次的答案,sum_b为多变行边的总长度,那么最终的答案为(dp[1][n]-sum_b)*2+sum_b。然后,定义多边形的边和弦组成的三角形上的权w(本题定义三角形的权为边长之和)。要求确定该凸多边形的三角剖分,使得该三角剖分中诸三角形上权之和为最小,则称其为凸多边形P的最优三角剖分。区间dp,分成i-k和k+1到j两段,计算把这两端合起来需要的代价,注意当k+1到j的长度为1时需要特殊处理。,vn-1}表示具有n条边的凸多边形。
2024-11-07 17:12:17
543
原创 VMware 卡顿 ,关闭侧通道缓解
使用VMware 时打开终端,连接ssh等会卡顿,可能时打开了侧通道缓解。关闭虚拟机,设计选项,下图打勾。
2023-02-23 11:20:29
4153
原创 2022杭电多校第二场 Slayers Come
我们将所有区间按照右端点从小到大进行排序,依次扫描每个区间,考虑一个区间[l,r]对dp数组的贡献。n个位置,m个区间,求选出的区间能够重复覆盖[1,n]的方案数。设dp[i]表示恰好覆盖了区间[1,i]的方案数。预处理计算出每个爆炸点爆炸的范围(可用st表+二分实现)用线段树维护这些dp信息(区间乘,单点加,区间求和)初始化dp[0]=1。...
2022-07-29 20:46:36
204
原创 2022杭电多校第二场 A.Static Query on Tree(树剖)
代码】2022杭电多校第二场A.StaticQueryonTree(树剖)
2022-07-22 16:23:45
525
原创 牛客,似花还似非花(dp优化)
似花还似非花这个题实际上是求解两个排列的包含某一特定元素的情况下的最长公共子序列长度。最长上升子序列用树状数组优化//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int long long#define fi first#define se second#define pb push_back#define pii pair<
2022-05-16 16:24:42
131
2
原创 D. Toss a Coin to Your Graph...(二分)
D. Toss a Coin to Your Graph二分答案 x权值比小于等于x的点重新建图,之后拓扑排序,判断最长链是否大于等于k或者是否存在环//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int long long#define fi first#define se second#define pb push_back#
2022-05-16 14:50:35
242
原创 The 19th Zhejiang Provincial Collegiate Programming Contest F - Easy Fix(主席树)
F - Easy Fix//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int long long#define fi first#define se second#define pb push_back#define pii pair<int,int>#define yes cout<<"YES\n"#d
2022-05-13 16:06:30
801
1
原创 Junior Mathematician(数位dp)
Junior Mathematician#pragma GCC optimize(2)#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define ll long long#define fi first#define se second#define pb push_back#define pii pair<int,int>#define IOS ios::sync_with_stdi
2022-04-11 14:40:14
383
1
原创 E - Gojou and Matrix Game
E - Gojou and Matrix Game因为v[i][j]的值都不同 所以先找最大值,一定先手胜利(第二个人选了之后第一个人可以无限次选最大值)之后在曼哈顿距离外的点一定不能赢在曼哈顿距离内的找一点最大值(也一定赢)……………………(不断去找 且要维护菱形的面积,可以用斜线去表示菱形)#pragma GCC optimize(2)#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>//#defin
2022-03-28 15:17:06
835
1
原创 E.Rescheduling the Exam
显然可以二分答案,check里 记录a[i]-a[i-1]-1<x的数量计为nd 计即需要移动的数量如果nd>=3 则无解nd =2 这两个需要移动的数要连续nd=1 去判断是否有可以移动到的位置nd=0 一定可以(有一点细节//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int long long#define fi
2022-03-09 10:17:30
484
1
原创 D. Big Brush
Big Brush题意:每次涂色2×2的矩阵 (可以覆盖),给出目标矩阵,求涂色方案。思路:反过来想,最后一次涂色一定 是2×2的矩阵内颜色相同(可以多个起点),反过来bfs修改已经处理过的矩阵为0;//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int long long#define fi first#define se sec
2022-02-15 15:57:32
667
原创 Codeforces Global Round 19 E. Best Pair
Best Pair题意:cntx 为x出现次数 f(x,y) = (cntx+cnty)*(x+y); 求不被禁用的最大f(x,y);思路:按cnt (出现次数)分类 ,最多有 根号n类 再去枚举x,y//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int long long#define fi first#define se s
2022-02-13 12:29:03
827
原创 D. Range and Partition
D. Range and Partition题意:给你一个长为n的数组,让你分成k段,满足每段在[x,y]内的严格大于在在[x,y]外的,请你最小化y − x并输出切割方案。思路:若有cnt1个数在[x,y]内 cnt2个数在[x,y]外 则整个区间一定能分成cnt1-cnt2段(类似中位数分段:传送门)cnt1+cnt2=n , cnt1-cnt2=k 则cnt1=(n+k+1)/2可以用双指针求出 [x,y] 内有cnt1个数的最小区间//#pragma GCC optimize(2)
2022-01-29 16:38:45
1096
原创 F2. Game on Sum (Hard Version)
F2. Game on Sum (Hard Version)dp方程: f[i][j]=i(i==j时)复杂度nm,考虑优化,观察到转移方程和组合数的公式类似考虑 (i,i)对(n,m)的贡献 即(i,i)到(n,m)路径的数量 往下 n-i次 ,往右下m-i次 (第一次只能往下) 所以路径数为C(n-i-1,m-i) 再处理权值 初始值为i,每次向下要除以2//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")
2022-01-29 14:12:17
1335
原创 E. String Reversal(逆序对)
Realistic Gameplay题意:给出字符串S 求 交换相邻字符后变成 S的逆序 的最小操作。思路:给S的逆序每个字符从小到大赋值 再 对应到S中 即求S的逆序对个数比如 S:aaaza 的逆序 T:azaaa t[]=1,2,3,3,3. s[]=1,3,3,2,3//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int
2022-01-20 14:49:47
690
1
原创 E - OpenStreetMap
OpenStreetMap题意:数字矩阵内求 所有a*b 的子矩阵中的最小值 的和思路:最小值用单调队列维护,像滑动窗口一样//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int long long#define fi first#define se second#define pb push_back#define pii pa
2022-01-20 11:14:06
276
原创 E. Black and White Tree
Black and White Tree题意:n个节点的树,至少有两个黑色的节点。你可以选择任意一个黑色节点向它走一步。对于任意两个相邻的操作不能选择同一个黑色的节点。 问从某个结点出发能否到达黑色结点思路:黑色结点 和黑色结点相邻的一定可以,或者 某个结点的子节点可以且子树中有2个以上黑色结点//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#defin
2022-01-19 12:57:19
537
原创 G - MinOr Tree(按位贪心)
题意:在一个有权无向联通图上,找出一颗生成子树,使得生成子树所有边的或最小。思路:从高位到低位贪心,如果高位为1的舍去任然可以有生成子树 则可以舍去//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int long long#define fi first#define se second#define pb push_back#de
2022-01-12 10:52:02
345
原创 Lexicographically Small Enough(平衡树)
题意:交换相邻位子,使得s字典序比t小思路:将本位换成比原来为小的数值或将本位换成与原来位相同的数值然后继续走下去 (平衡树维护交换的位子)//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#include<ext/rope>#include<ext/pb_ds/assoc_container.hpp>#include<e
2022-01-08 15:00:34
387
原创 E.Sasha and Array(线段树+矩阵快速幂)
矩阵相乘有分配律和结合律,所以可以用线段树维护斐波那契矩阵的k次方即矩阵 jz[1][1]=jz[1][2]=jz[2][1]=1;jz[2][2]=0;的k次方#pragma GCC optimize(2)#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int long long#define fi first#define se second#define pb push_back.
2021-12-06 20:16:09
220
原创 Magic Gems(矩阵快速幂优化dp)
Magic Gems由题意易得dp转移方程 : f[i]=f[i-1]+f[i-m]构造m*m矩阵(类似斐波那契数列)1 0 0……0 0 1 f[i-1] f[i] 1 0 0……0 0 0 f[i-2] f[i-1] 0 1 0……0 0 0 f[i-3]
2021-12-01 20:47:31
250
原创 E. William The Oblivious(线段树)
题意:给定只包含abc的字符串 ,q次单点修改 每次修改后问 使得不包含abc为子序列的最小操作数是多少设t[k].abc为不包含abc为子序列的最小操作数得到以下状态转移 t[k].a=t[k<<1].a+t[k<<1|1].a; t[k].b=t[k<<1].b+t[k<<1|1].b; t[k].c=t[k<<1].c+t[k<<1|1].c; t[k].ab=min(t[k<<1].a
2021-11-30 19:16:01
400
2
原创 二维三点求圆心
ld X,Y,R;struct node{ ld x,y;} t[maxn];ld dis(node x,node y){ return sqrt((x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y));}node sol(node a,node b,node c)//三点共圆圆心公式{ X=( (a.x*a.x-b.x*b.x+a.y*a.y-b.y*b.y)*(a.y-c.y)-(a.x*a.x-c.x*c.x+a.y*a.y-c.y*c.y)*(a.y
2021-11-29 20:53:38
298
原创 判断线段与圆是否相交
struct Point { ll x, y;} ;Point O; //圆心ll r; //半径// 判断线段是否和圆相交bool pd(Point *p_1, Point *p_2){ ll a,b,c,dist_1,dist_2,angle_1,angle_2; if(p_1->x==p_2->x) { a=1,b=0,c=-p_1->x; } else if (p_1->y==p
2021-11-29 20:52:06
334
原创 判断线段相交
struct point{ double x,y;};bool inter(point a, point b, point c, point d){ if(min(a.x,b.x)>max(c.x,d.x)||min(a.y,b.y)>max(c.y,d.y)||min(c.x,d.x)>max(a.x,b.x)||min(c.y,d.y)>max(a.y,b.y)) return 0; double h, i, j, k; h=(b.x-a.x)*(c.y-a
2021-11-29 20:43:05
84
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人