自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(545)
  • 收藏
  • 关注

原创 C++ LRU O(1)实现

思路 维护双链表 head代表最久没被使用的节点,当我们要更新时 普通链表操作需要遍历,这里我们拿哈希表索引链表的位置,直接o1删除,挺麻烦的。

2023-03-30 22:33:30 268 1

原创 python 格式化输出

123

2022-12-09 16:45:36 281 1

原创 python java lambda表达式自定义排序

sort

2022-11-17 13:54:40 221

原创 mat 加速模板

123

2022-10-14 16:56:10 141 1

原创 点分树、点分治

1

2022-10-12 13:54:19 198 1

原创 小G的GLS图 tarjan割点 虚点

链接思路:原来n^2暴力建边取割点肯定可以,就是太慢了,我们思考对于每个不同的质因数建立新的虚点,连向存在质因数的点,这样最多只有nlogn条边,然后想了想对于原图的性质确实是不变的。但是要注意一些细节,质因数只有1个度数的点没必要连,不然例如6 向2 3连边,2和3只有1度,那么6是割点,但其实不是,我们在建边的时候特判一下即可,还有就是质因数显然是割点,我们别把它算进去即可。复杂度nsqrt(1e7)+O(tarjan)nsqrt(1e7)+O(tarjan)nsqrt(1e7)+O(tarjan)

2022-05-16 16:45:06 143

原创 斯坦纳树模型 魔物消灭计划

链接用于求必选点的最小生成树,复杂度指数,思想是dp,dp[i][j]代表以i为根j状态的必选点dp[i][j]代表以i为根j状态的必选点dp[i][j]代表以i为根j状态的必选点。状压处理两个转移,一种是同一个state的转移,dp[x][st]=dp[y][st]+dis(x,y)dp[x][st]=dp[y][st]+dis(x,y)dp[x][st]=dp[y][st]+dis(x,y) 由最短路处理,这个部分2k∗n∗log(n)2^k*n*log(n)2k∗n∗log(n)一种是两个不相交子集

2022-05-15 16:25:19 430

原创 NTT模板 神奇的迷宫 NTT加点分治

链接题意就是求给定一棵树求∑0n−1Wl∑∑[dist(i,j)==L]∗a[i]∗a[j]\sum_{0}^{n-1} W_l \sum\sum [dist(i,j)==L]*a[i]*a[j]∑0n−1​Wl​∑∑[dist(i,j)==L]∗a[i]∗a[j]大小为1e5思路:树上路径考虑点分治,顺便复习了一下点分治,就是每次递归选一个重心,总共期望是lognlognlogn层,每一层我们可以用nlognnlognnlogn的复杂度。我们对每一种长度的路径考虑,只要满足i+j==L那么不难想

2022-05-10 15:41:34 299 2

原创 第k大数查询 链表优化

#include<bits/stdc++.h>using namespace std;const int N=500010;int pre[N];int ne[N];int a[N];int id[N];int c[N];int d[N];int main(){ int n,k; scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&a[i]),id[a[i]]=i; long lon

2022-05-02 19:28:22 788

原创 leetcode 6054. 逃离火灾 思维 bfs

link思路:当然可以二分 + bfs 复杂度O(log(n∗m)n∗m)O(log(n*m)n*m)O(log(n∗m)n∗m) 这个比较好想,但如何进一步优化,我们可以逆向考虑,从终点倒着找到离终点最近的火和最近的人的距离,当然如果火比人先到那肯定就是-1,如果找不到火就是1e9,然后就判断最近的火和人的位置关系,因为右下角只有两种转移位置,一种是上方一种是左方,有个比较有意思的性质,到两个方向的人的差要么是0,要么是1,而火的差距可以取到0,1,2,大家可以思考一下为什么?如果最近的火到这两个

2022-05-02 13:37:27 243

原创 浙工大race 线性基

#include<bits/stdc++.h>using namespace std;int b[200010][33];int n,m,q,k;const int N=200010;bool st[N];int p[N];int cnt;int h[N],e[N<<1],ne[N<<1],idx,w[N<<1];int id[N];int d[N];unordered_set<int>Set[N];int find(int

2022-05-01 11:59:18 165

原创 unordered_map/set自定义哈希函数

hash

2022-04-30 17:17:42 754

原创 GPLT2020L3-2Splay

#include<bits/stdc++.h>using namespace std;const int N=600010;#define int long longstruct Node{ int s[2], p, v; int size; // 记录以当前节点为根的子树的节点总数 void init(int _v, int _p) { v = _v, p = _p; size = 1; }}tr[N]; void pushup(int u){ tr[u].s

2022-04-24 00:50:54 235

原创 GPLT2022天梯赛L3-2

考虑计算贡献#include<bits/stdc++.h>using namespace std;vector<int>v[300010];#define int long longint res=0;const int mod=1e9+7;vector<int>tmp;int qmi(int a,int b){ int res=1; while(b) { if(b&1) res=res*a%mod; b>>=1;

2022-04-23 20:23:44 449

原创 python多组读入

import systry: while True: alpha=["A","H","I","M","O","T","T","U","V","W","X","Y"] s = sys.stdin.readline().strip() if s == '': break T = "" flag = True for i in range(len(s) - 1, -1, -1):

2022-03-06 17:42:32 466

原创 CCA的区间 思维sosdp 区间反转trick

思路:可以反转一个区间 ,就代表 取两段 互不相交的合法区间,这里互不相交指的是对于任何一个元素,两段区间不存在都有该位的情况,合法也是,然后最大值,由于每个数是二进制位,说明每一段区间长度不超过 24,所以初始值dp[i]=i,如果i能取到,我们可以子集dp代表 i的子集的最大值,然后枚举它的补集,可以发现,这两个刚好不相交,所以不用判断是否相交,然后复杂度 nlogn,n<=224n logn,n<=2^{24}nlogn,n<=224code#include<bits.

2022-03-06 00:08:51 217

原创 java 板子dddd

class Splay{ class node { int v,father; int ch[]=new int[2]; int sum; int recy; }; Splay() { for(int i=0;i<e.length;i++) { e[i]=new node(); } } node[] e=..

2021-12-26 12:02:08 312

原创 leetcode 工作每日一题 475. 供暖器 (二分 stl)

题意:冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。在加热器的加热半径范围内的每个房屋都可以获得供暖。现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。思路:可以二分写,但会多一个log,其实双指针on 能做的应该,无非就是找到离房子最近的供暖器,然后每个房子取max即可。C++code:class Solution {public: int findRadius(vector<

2021-12-20 10:02:30 184 2

原创 leetcode 工作 每日一题 997. 找到小镇的法官

题意:思路:直接模拟即可 复杂度O(n2)O(n^2)O(n2)class Solution { public int findJudge(int n, int[][] trust) { boolean g[][]=new boolean [n+1][n+1]; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) g[i][j]=false; for(int i=0;i<trust.l

2021-12-19 23:08:49 237

原创 leetcode 工作 每日一题 419. 甲板上的战舰 双指针

题意:每个连续的x成为一组,每一组x独立,求x组的个数思路:双指针 复杂度O(row*col)code javaclass Solution { public int countBattleships(char[][] board) { int n=board.length; if(n==0) return 0; int m=board[0].length; bool

2021-12-18 22:59:35 296

原创 leetcode 每日一题 1518. 换酒问题(模拟)

思路:每次取模换率,把多出来的加到膜完的数上面。class Solution {public: int numWaterBottles(int numBottles, int numExchange) { int res=numBottles; while(numBottles>=numExchange) { int tt=numBottles/numExchange; res+=tt; .

2021-12-17 17:59:15 411

原创 (工作预备)lc每日一题

思路:类似极角排序加双指针,不知道那个夹角怎么求,结果看题解可以atan2求。atan2大概是这么个分布,然后双指针即可,记得把数组扩增两倍再加个2pi,每次更新最大值即可,还有个细节就是和源点在同一点直接加就行。const double PI=acos(-1);class Solution {public: int visiblePoints(vector<vector<int>>& points, int angle, vector<int&g.

2021-12-16 10:36:28 1033

原创 java homework1

package pac;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.*;import java.util.Scanner;// user 记录登录信息的;//dormitory_grade 门牌号 , grade//stu 记录学生信息 stuid name 门牌号//do

2021-12-07 15:49:47 182

原创 很妙的思维模型整理

2021.11.15https://ac.nowcoder.com/acm/contest/17797/K两种操作 op1 加一层val的线段l到r op2询问包含在区间[l,r]的所有线段的最大差值要求强制在线,m=1e5 n=3000很秒的操作就是转为二维平面前缀max和min,把l,r分别作为x和y轴,我们每次查询希望是个前缀,也就是包含在[l,r]平面内的点都能有贡献,但是有个不好的地方就是l是递减的,刚好跟坐标轴是反着来,我们可以对称一下用N-l来add点,然后正常查询用二维bit就行了,

2021-11-16 16:43:21 135

原创 桂林B题 A plus B

我是绝对不会说因为少加了一句if(l>r) return -1;特判然后拿的铜#include<bits/stdc++.h>using namespace std;const int maxn=2e6+9;//char s[maxn];char s[4][maxn];int c[maxn];struct node{ int l; int r; int minv; int maxv; int lz; }tr[maxn<<2];void pushdown

2021-11-08 16:20:04 293 1

原创 5917. 同源字符串检测 暴力 dp 字符串匹配

link题意:给定目标字符串s1,s2问是否存在一个字符串能满足生成s1并且生成s2,s1和s2中会有一些数字,数字可以任意分割成某些字符。len<=40任意连续数字不出现超过3个len<=40 任意连续数字不出现超过3个len<=40任意连续数字不出现超过3个思路:dp[i][j][k]dp[i][j][k]dp[i][j][k]代表匹配到s1的i处,匹配到s2的j次,当前s1比s2的通配符多k个,最后check(dp[n][m][0])就可以了。如何转移呢,分类讨论即可,del

2021-11-01 14:58:53 193

原创 E. Arena dp计数

link题意:给定有n个人,n个人可以取1~x这些取值,n<=500,x<=500 每一轮当场活的人会同时朝所有在场的人开一枪,也就是hp-=1,最后如果全死算是一种方案,问有多少方案。n<=500x<=500n<=500 x<=500n<=500x<=500思路:考虑dp,dp[i][j]dp[i][j]dp[i][j]代表考虑前i个人,取值<=j的合法方案数,可以发现如果在场一个人是对答案没有贡献的,dp[i][j]dp[i][j]dp[i]

2021-11-01 14:43:18 375

原创 1927. 求和游戏

link题意:简述一下题意就是alice和bob轮流将数字0-9填入?,alice想左右数字和差不为0,bob想差值为0,问谁可以赢。思路:博弈的题是真头大了,一开始想的alice肯定让差值变大,填9,然后遗漏了很多性质,下面依次考虑一下遗漏的性质,考虑问号的数量,如果加起来是奇数那么一定输,因为alice可以操作最后一次,假设d为两者相同的最后一个取值,alice不选这个即可,然后考虑左右的问号数,由于差值变大,后者最好要重复上一次的操作,最后只变成了一边有问号了,那么肯定是偶数数量的问号,每一

2021-11-01 13:51:15 245

原创 F2. Korney Korneevich and XOR (hard version)

link题意:给你长度为n的数组,n<=1e6,a[i]<=5000满足递增的子序列求出的值有哪些,求出具体方案。思路:正解是maxn^2的,我们从前往后遍历,由于会有很多重复的转移,我们考虑用一个ne数组代表多少个数能被x转移去重,g[x]数组代表以x为结尾,前面有多少个数能和x异或出来,由于ne数组是递减的,每次下降的时候要判断是否大于x,因为要判断是否是严格上升子序列,然后放到新的vector里面,用完以后记得把当前遍历完的清空。#include<bits/stdc++.h

2021-10-25 20:32:36 438

原创 UVA12716 GCD等于XOR GCD XOR 数论

link题意:给定n求∑i=1n∑j=in[i⊕j==gcd⁡(i,j)]     n<=3e7\sum_{i=1}^n \sum_{j=i}^{n} {[i\oplus j==\gcd(i,j)]} ~~~~~n<=3e7∑i=1n​∑j=in​[i⊕j==gcd(i,j)]     n<=3e7思路:有个结论,就是i⊕j>=i−j>=gcd(i,j)i \oplus

2021-10-21 22:45:56 214

原创 ccpc网络赛 Jumping Monkey 逆向并查集,重构树技巧

题意:树上所有点有点权,询问每个点,问对于每个i来说有多少v来说,在i到v的路径上v为最大点权 n<=1e5n<=1e5n<=1e5思路:考虑逆向,把树上的点按照点权从小到大排序,那么我们可以发现,当前遍历的这个点对和当前他联通的所有点有贡献,那么我当时有疑问的是怎么把这个贡献加上去,这样挨个遍历会T,有个很牛逼的重构树的思想,该新节点向当前这个集合的最大值的id连边,然后重新在新图上跑一遍,然后统计所有点的深度就行了。ac代码:#include<bits/stdc++.h

2021-10-13 13:48:29 212

原创 leetcode 546. 移除盒子 区间dp

link题意:每次可以删除连续的相同的数,删除k个贡献为k*k,问删完的最大贡献。n<=100思路:一开始想到的是区间dp,但是二维不知道怎么转移,看了题解,只能说是太难想到了,三维dp[i][j][k]dp[i][j][k]dp[i][j][k]代表删除i~j并且i是最后一次删除,并且最后一次删了k个元素的最大值。最后答案就是maxkdp[0][n−1][k]max_{k}dp[0][n-1][k]maxk​dp[0][n−1][k],为什么这样一定能求出答案呢,有一个重要的性质是一定能构

2021-10-13 13:36:20 218

原创 leetcode 2035. 将数组分成两个数组并最小化数组和的差

题意:给你一个长度为 2 * n 的整数数组。你需要将 nums 分成 两个 长度为 n 的数组,分别求出两个数组的和,并 最小化 两个数组和之 差的绝对值 。nums 中每个元素都需要放入两个数组之一。请你返回 最小 的数组和之差思路:刚开始想的是爆搜,结果一直T,大概2e8的复杂度,想不出来也没法状压,结果有一种叫折半的思想,也就是两边搜,各个部分搜一半,这个题也就是让我们取n个正数n个负数,每一边状压k个正数 n-k个负数,然后枚举第一种的情况,在第二种n-k个正数里二分搜答案.搜的时候注意前

2021-10-11 13:09:35 512

原创 探索bsgs/exbsgs

众所周知bsg是处理ax≡b(modp)求最小的幂次如果(a,p)=1我们可以发现ax≡ax%ϕ(p)那么只需要开一个p的块先预处理出来p的余数,放进hash表里注意这里hash表存的是右边,也就是带有b的p的幂次,每次查找的时候一整块一整块查询复杂度O(p)那么exgs能处理什么问题呢?处理(a,p)≠1的情况先将ax+kp≡b,如果a和p的gcd不能整除b的话那么就是无解否则两边同÷d,也就是(a/d)∗ax−1+k(p/d)=b/d(a/d)∗ax−1≡b/d( mod(p/d)),然后用e

2021-10-08 08:27:15 178 2

原创 EC_FINAL E.flow 贪心 好模型

LINK题意:给你一张图,这个图保证1到n的路径长度相同并且不相交,每条边会有个流量,每次操作可以使得一条的流量-1,一条边的流量+1,问最少操作多少次可以满足最大流量思路:这个图大概长成这样。考场上并没有发现很好的性质,只发现了每条路径的容量取决于min(∑c)min(\sum c)min(∑c),然后想着该怎么把大的容量转移给小的,然后。。就做不出来了。后来看了正解,正解是把每条路径按照容量排序,由于我们可以先知道答案的流量,然而如果要流ansansans的流量,那么一定要满足每条边都要满足

2021-10-07 18:46:17 177

原创 linux shell 批量操作

#! /bin/bash homework 1 create------#-dir=/home/acs/homework/lesson_1/homework_0for i in dir_a dir_b dir_cdo>--- mkdir ${dir}/${i}donedir1=/home/acs/ho

2021-10-05 23:52:44 241

原创 Gourmet choice DP+拓扑

LINK题意:给定∑i=1n∑j=1m\sum_{i=1}^{n}\sum_{j=1}^{m}∑i=1n​∑j=1m​a[i]<b[j],也就是所有ai和bj的关系我们是知道的,最后求最大值最小的构造方案,如果无解输出NO思路:先把相等的点用并查集维护一下,然后我们只维护<的关系,因为>反向建图就行了,然后跑拓扑DP,f[i]>=∑j=premax(f[j]+1)f[i]>=\sum_{j=pre}{max(f[j]+1)}f[i]>=∑j=pre​max(f[j

2021-10-04 21:47:09 158

原创 CF1131F Asya And Kittens并查集,暴力,新颖建图思维

题意:要求给出一个排列,给定n,有n-1对x,y要求每次x和y相邻,并且要保证他俩没有合并,并且将他俩所在的联通块合并。输出一种方案即可,n<=2e5n<=2e5n<=2e5思路:看到了一个比较新颖的做法,类似克鲁斯卡尔重构树,每次合并两个点,新开一个点,然后用并查集去维护,把这两个点的根和点连边,维护并查集数组,然后求前序遍历就可以了。看上去好像挺对,因为每个联通块是独立的,我们每一次合并就是维护了他俩之间的顺序,也不影响他们内部的顺序#include<bits/stdc+

2021-10-04 21:41:48 172

原创 I. Rise of Shadows

LINK题意:给定H和M,每天有H小时M分钟,求时针和分针角度<=α\alphaα的整分针数。思路:α=2πAHM\alpha=\frac{2\pi A}{HM}α=HM2πA​,可以发现每分钟时针的速率是2πHM\frac{2\pi }{HM}HM2π​,分针是2πM\frac{2\pi }{ M}M2π​,他俩的差值是2π(H−1)HM\frac{2\pi(H-1)}{HM}HM2π(H−1)​我们会发现两个指针一块动的时候不太好计算,我们尝试固定分针,枚举每一分钟时针对它的贡献,...

2021-10-04 19:05:03 474

原创 (扩)欧几里得的一些见解

ax+by=gcd(a,b)gcd(a,b)=gcd(b,a%b)首先证明上面这个柿子假设d=gcd(a,b)把a展开成k∗b+r,显然r=a%br=a−k∗b显然r是d的倍数,也就是d∣r,a%b=a−(a/b)∗b.假设会有个更大的D能∣a%b,那么也一定可以∣a和b,与前面不符合下面讲exgcd(a,b,x,y)a∗x1+b∗y1=(a,b)b∗x2+(a%b)∗y2=(a,b)b∗x2+(a−a/b∗b)∗y2=a∗x1+b∗y1a∗x1+b∗y1=a∗y2+b∗(x2−a/b∗y2)x1=y2,y

2021-10-04 11:58:05 183

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除