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

原创 ~小结论~
逆序对: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
351
1
原创 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
457
原创 VMware 卡顿 ,关闭侧通道缓解
使用VMware 时打开终端,连接ssh等会卡顿,可能时打开了侧通道缓解。关闭虚拟机,设计选项,下图打勾。
2023-02-23 11:20:29
3981
原创 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
188
原创 2022杭电多校第二场 A.Static Query on Tree(树剖)
代码】2022杭电多校第二场A.StaticQueryonTree(树剖)
2022-07-22 16:23:45
509
原创 牛客,似花还似非花(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
113
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
223
原创 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
781
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
369
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
819
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
472
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
637
原创 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
811
原创 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
1082
原创 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
1314
原创 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
667
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
273
原创 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
522
原创 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
330
原创 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
364
原创 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
207
原创 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
235
原创 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
382
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
273
原创 判断线段与圆是否相交
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
317
原创 判断线段相交
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
78
原创 Manacher最长回文子串
//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int long long#define ld long double#define fi first#define se second#define pb push_back#define pii pair<int,int>#define IOS ios::sync_wi
2021-11-29 20:34:45
104
原创 约瑟夫环(klogn 和线性)
int josephus(int n, int k) //O(n) n个人 数到k删除{ int res = 0; for (int i = 1; i <= n; ++i) res = (res + k) % i; return res;}int josephus(int n, int k) //O(klogn){ if (n == 1) return 0; if (k == 1) return n - 1; if (k > n) return (josephu
2021-11-29 20:10:50
289
1
原创 2021牛客多校 Hash Function(fft或者NTT)
Hash Function题意:给出数组,求最小的mod使得 每个数取模后都不同。思路:a%p=b%p 等价于 (a-b)%p=0 ,所以p不能为数组中任意两个数的差 ,假设我们现在知道了存在哪些差值,那么我们可以枚举倍数的方法求最小的p,求所有差值可以用fft ,可以转化为(xa1+xa2+xa3+……+xan)*(x-a1+x-a2+x-a3+……+x-an) 系数大于0的那个指数就是存在的差值负数可以加个500001;#include<bits/stdc++.h>#defin
2021-11-24 20:48:13
392
原创 2021 ICPC Jinan J .Determinant
题意:给出行列式和det的绝对值 ,求det的正负取大质数mod(不是det的因子) det取模,高斯消元求出det 取模 若相等则+,否则-;(mod-det)%mod 和det%mod 当det=mod或 mod-det=det时相等#pragma GCC optimize(2)#pragma GCC optimize(3,"Ofast","inline")#include <bits/stdc++.h>#define IOS ios::sync_with_stdio(false
2021-11-15 19:57:06
288
原创 高斯消元求行列式(取模)
int gauss(int A[N][N],int n){ int ans = 1; for(int i=1;i<=n;i++) { for(int j=i;j<=n;j++) { if(A[j][i]) { for(int k=i;k<=n;k++) swap(A[i][k], A[j][k]); if(i!=j) ans=-ans; break; } } if(!A[i][i]) return 0; for(int
2021-11-15 19:51:07
880
原创 D. Treelabeling
Treelabeling结论:每个点都能是必胜点,最高位的1在相同位子则能走,否则不能走那么可以按1的最高位子来处理(最高位的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#def
2021-11-13 12:59:59
777
原创 D. Unmerge(01背包)
D. Unmerge//#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 IOS ios::sync_with_stdio(fal
2021-11-09 19:02:59
119
原创 历史研究(回滚莫队)(add)
历史研究题意:给你一个长度为n的数组 和 q个询问 ,每次询问一个区间 l,r 内重要度最大的数字,要求 输出其重要度。一个数字 x重要度的定义为 x乘上x 在区间内出现的次数。//#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
2021-11-03 18:06:07
131
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人