自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【无标题】111

本接口文档遵循以下规范约束:因此请求的消息头为:1. 主诉查体诊疗计划识别uri:url:服务常见的响应码如下:1.4.2 正常响应报文1.4.3 异常相应报文**注:**具体错误信息见字段。

2023-06-25 14:07:04 161

原创 AcWing 256. 最大异或和(可持久化字典树)

【代码】AcWing 256. 最大异或和(可持久化字典树)

2023-03-09 17:40:20 122

原创 acwing-239. 奇偶游戏(经典带权并查集)

【代码】acwing-239. 奇偶游戏(经典带权并查集)

2023-03-08 17:47:28 110

原创 Subway Map(最短路&路径打印)

分析:题目要求打印路径,可以用数组path[]实现,但是又要区分经过哪些地铁线路,概率用map mp,表示某两站之间的路属于那条线路。做题记录:50mins,25/30,等待有时间再debug一下。

2023-03-05 14:45:25 152

原创 1119 Pre- and Post-order Traversals(前+后确定树|分治建树)

【代码】1119 Pre- and Post-order Traversals(前+后确定树|分治建树)

2023-03-03 21:07:02 51

原创 1115 Counting Nodes in a Binary Search Tree(分治建树--二叉搜索数)

case 2: 给前序加中序+前序(后序)确定一棵树。case 3:动态建立二叉排序树(本题)case 1:给一个堆,让你建树。

2023-03-03 20:05:04 53

原创 1110 Complete Binary Tree

【代码】1110 Complete Binary Tree。

2023-03-03 17:38:26 38

原创 1108 Finding Average(IO格式处理)

注意使用stoi,stof,isdigit。

2023-03-03 17:12:09 38

原创 1105 Spiral Matrix(蛇形矩阵)

【代码】1105 Spiral Matrix(蛇形矩阵)

2023-03-02 20:16:01 51

原创 1159 Structure of a Binary Tree(中序+后序建树|丑陋输入的处理|full tree的定义)

【代码】1159 Structure of a Binary Tree(中序+后序建树|丑陋输入的处理|full tree的定义)

2023-02-28 21:37:39 86

原创 1170 Safari Park(思维题:无解回溯法)

关键点:不可做时,回溯,另寻他枝,曲线救国。考察:时间复杂度分析。

2023-02-27 21:34:36 94

原创 1167 Cartesian Tree(堆&分治建树)

考察:小根堆的特点,当前节点比他的两个孩子小,以此为突破口,分治建树即可。

2023-02-27 21:26:46 94

原创 1166 Summit(完全图)

关键点:加一个点是否还是完全图,判断加入的点是否与前序的点都有相连的边就可以了。考察:时间复杂度分析。

2023-02-27 21:23:45 41

原创 1103 Integer Factorization(DFS)

大意:将整数N分成K个正整数的P次幂之和。

2023-02-27 21:19:47 58

原创 poj(旋转卡壳求凸包中最大三角形)

思路:我们知道在旋转卡壳的过程中会有这样的一个东西:在枚举对种点时,我们发现固定一个线段,然后枚举另一个点,那么有向三角形的面积的递增的,这里不是固定一条线段,但是我们还是可以这么想,先固定a,b,c三个点,然后旋转c,爬山法求最大面积,然后旋转b,再爬山法求最大面积。/*#include<bits/stdc++.h>#include<unordered_map>#include<unordered_set>*/#include <map>#inc

2021-03-29 14:27:55 162

原创 poj Disks(思维细节好题)

题意:给你n个圆的半径,让你依次在x和y正半轴展开,求移去哪些圆不会使得这个整体的结构发生左移并且不会改变整个结构的宽度。思路:这道题我一共交了27发才过,细节贼多。总体的来说的话有这么几个点,首先我们可以知道的是画出两个圆自然相切时的的转态,发现后面的圆的坐标是前面圆的x坐标+sqrt((r1+r2)∗(r1+r2)+(r1−r2)∗(r1−r2))x坐标+sqrt((r1+r2)*(r1+r2)+(r1-r2)*(r1-r2))x坐标+sqrt((r1+r2)∗(r1+r2)+(r1−r2)∗(r1−

2021-03-28 18:28:59 101

原创 扩展lucas+容斥

扩展lucas+容斥给出一个方程x1+x2+x3+………xn=m现在给出两种制约。制约1:对于前解的前N1个数字,有制约xi<=a[i];制约2:对于从N1+1到N1+2的数字,有制约xi>=a[i]思路:对于制约2,比较好处理,在等式两边同时减去a[i]-1,使得有xi>=1,那么问题转化成了m-c个小球放进n个盒子的问题。然后对于制约1,我们想是不是也能通过一定的转化变成操作2,答案是肯定可以的,我们xi<=ai取对立面也就是xi>=a[i]+1,那么就是和制约2

2021-03-22 18:51:33 151

原创 C. Heretical … Möbius

const int N = 1e9;int p[1010], cnt;bool vis[1010];unordered_set<int> st;char s[205];ll pri[] = { 2,3,5,7,11,13 };vector<int> g[6];ll a[6];void get() { f(i, 2, 1009) { if (!vis[i])p[++cnt] = i; for (int j = 1;p[j] <= 1009 / i;j++

2021-03-15 19:41:14 252

原创 P3222 [HNOI2012]射箭(二分+半平面交)

#include<bits/stdc++.h>#include<unordered_map>#include<unordered_set>#define f(i,a,b) for( int i=a;i<=b;++i)#define ff(i,a,b) for( int i=a;i>=b;--i)#define debug(x) cerr << #x << " : " << x << " " <&l

2021-03-10 15:59:12 188

原创 P3493 [POI2009]WSP-Island(贪心,半平面交)

题意:给出一个凸包(顺时针),然后初始化下,凸包上任意两点都是有路径的,现在给出m次被封锁的路径,求在不经过这些被封锁的路径(可以在交叉路口经过这个点),求从1号点到n号点的最路径。思路:认真画个图可以发现,最优情况都是尽量走内侧,也就是尽量走向编号的大的,那么就预处理出每个点可以到达的编号最大的点,那么对每条(当前点–>可以直接达到的编号最大的点)求半平面交,就求出了答案。其中有一种情况需要特判,就是1号点可以直接到达n号点,在这种情况下会出现半平面交无限大的情况。#include<bit

2021-03-06 12:11:29 112

原创 acwing2847. 老C的任务(cdq分治求三维偏序)

思路:求一个矩阵内的点数可以用二维前缀和求出,那么二维前缀和就是求左下方的点的数量,也就是存在偏序关系xi<xj,yi<yj,那么直接上cdq分治求偏序关系。const int N = 6e5 + 100;struct node { int x, y, z; ll p; int id, fg; ll sum; bool operator<(const node& b)const { if (x != b.x)return x < b.x; if (y !

2021-03-04 20:45:22 131 1

原创 D. Two Pirates -2(经典概率dp倒着来)

描述:有n个宝贝,玩家1每次会拿剩下的宝贝中最贵的,玩家2则是随机选。思路:正着想不太好做。然后经典倒着来,其实这个也是有原因的,我们发现问题的关键在于玩家1想去拿上上一层最贵的宝贝时,宝贝可能被上一层的玩家2拿走了,这个其实就是要枚举玩家2上一层选的宝贝是比当前贵还是便宜也就是枚举左右侧。做法:倒着来,问题转化为向一个空的盒子放球,黑球是玩家1放的,白球是玩家2放的。dp[i][j]表示放完i个球后,从左往右数第j个球是黑色的。放黑球时,保证当前放入的求是最大的,那么插入最右边,其他的继承。放白球时,

2021-03-02 19:40:37 507

原创 P3211 [HNOI2011]XOR和路径(随机程序模型)

题意:给一张图,求从1号点到n号点路径上边的异或和的期望。分析与总结:显然这个n=100已经暗示这是个典型的随机程序模型,但是这里是求异或和的期望,异或?拆位算每一位的经过次数为奇数次的概率,然后求出这一位的贡献。哦,那没事了。列出依赖方程就好了,设f[i]为从当前节点的某一位走到终点n,这位进过奇数次的概率,如果邻边这位无,那么邻点也是求奇数,否则邻点求偶数。const int N = 105;double f[N][N];int n;void gauss_jordan(){ f(i, 0,

2020-12-17 09:01:50 113

原创 P3412 仓鼠找sugar II(树上期望,换根思想算贡献)

题意:给定一颗树,取树上任意两点为起点和终点(这两点可以相同),求从起点走到终点的概率。分析与总结:明显这道题与换根有密切的联系,先考虑固定1号结点为根节点,套路考虑维护一个每个结点向根走近一步的期望步数f[]。考虑一个结点x如下图所示,它的儿子是s1,s2,父亲节点是fa考虑返祖边,显然考虑返祖边f[x]=1+(d[x]−1)+sigma(f[son])f[x]=1+(d[x]-1)+sigma(f[son])f[x]=1+(d[x]−1)+sigma(f[son])其实这个式子可以退出f[x]

2020-12-09 11:41:52 125

原创 P4284 [SHOI2014]概率充电器(概率期望,换根dp,条件概率)

题意:给出一颗n个点,n-1条边的树,每个结点都有其初始化的被点亮的概率,每条边也有其可以通电的概率,求能被点亮的灯的数量的期望。分析与总结:通过这道树形dp,加深了对换根的理解,对于解决一些有依赖性关系的问题,我们可以考虑高斯消元/换根dp,主要套路为先一遍dfs求出每个结点只考虑子节点中贡献,那么作为根,它的答案就是和我们想求的一致的。然后考虑换根,建议画图理解,主要思想是将父节点中的贡献排除这个点的贡献(在这里是个条件概率公式),然后这个点依赖是它的子树和父节点连接的那一坨的贡献。Latex太烦了

2020-12-08 12:10:35 193 1

原创 P3750 [六省联考2017]分手是祝愿(期望概率,返祖模型)

题意:给n个灯,初始化下给出每个灯的状态,给n个开关,操作开关i会使得编号是i的约数的灯的状态翻转一次,现在有一个种算法,如果当前状态下可以操作k次及以下就能使所有灯熄灭,直接操作这个次数,游戏结束,否则随机按一次开关。分析与总结:首先根据初始化的状态,可以知道最少操作几次使得全部灯都灭,那就是从高位开始操作(这个很显然)。然后分析下,假设现在有num个灯是开的,那么显然可以画出下面这个返祖模型。根据这个状态转移图,可以列出方程f[i]=n/i∗1+(n−i)/n∗(1+f[i+1]+f[i])f[

2020-12-07 16:16:28 147

原创 CF248E Piglet‘s Birthday(期望概率好题)

题意:有n个架子,每个架子i上有aia_iai​个蜂蜜罐,每次操作选择u上的k个罐子,吃每个罐子中的蜂蜜,把吃过的k个罐子放到v架子上,求每次操作过后,架子上的罐子全部被吃过的架子期望。分析与总结:显然又是个概率dp,显然题目的关注点在于该架子上还有多少被吃过的罐子,那么设计一个状态f[i][j]f[i][j]f[i][j],第i个架子上有j个未被吃过的罐子的概率。那么对于每次操作,v的状态是不用考虑的,考虑u的状态,首先枚举j表示当前u架子上有j个罐子未被吃过的概率,显然它是从上一层状态下拥有>=

2020-12-06 21:36:14 142

原创 P3232 [HNOI2013]游走(概率期望,高斯消元解决流量关系,随机函数变形)

题意:一个人初始化时在1号结点,给出一张双向联通图,每次这个人等概率的走到相邻的一个点,走到n结点游戏结束。 走过一条边时获得这条边的编号的分数。现在要求你给这些边编号使得最后他的期望值最低。分析与总结:显然要求每条边经过次数的期望,设边(u->x)的期望是exp(u−>x)exp(u->x)exp(u−>x),那么exp(u−>x)=exp(u)/d[u]+exp[x]/d[x]exp(u->x)=exp(u)/d[u]+exp[x]/d[x]exp(u−>x)

2020-12-06 21:19:25 161

原创 P3830 [SHOI2012]随机树(期望概率,二叉树套路枚举左右子树dp,期望转概率求和)

题意:有n个叶结点的二叉树,初始时只有一个根,每次等概率的从叶子结点中选一个岔开来。1.求叶子结点平均深度的期望2.树深度的期望分,定义根节点的深度为0。分析与总结:对于操作1比较好想,设f(x−1)f_(x-1)f(​x−1)是有x-1个叶子结点时的平均深度的期望。那么f(x)=(f(x−1)∗(x−1)+f(x−1)+2)/xf(x)=(f(x-1)*(x-1)+f(x-1)+2)/xf(x)=(f(x−1)∗(x−1)+f(x−1)+2)/x,这个建议画图很快就能理解。发现每次的增量是f(x-1)+

2020-12-06 21:03:22 290

原创 P6835 [Cnoi2020]线形生物(期望概率,游戏冲关模型,分析流量关系)

题意:每个结点(1到n)都有一条连向下一个结点编号的边,又给出m条返祖 边,求从1号点到n+1号点的期望步数。分析与总结:这种有关流量关系的期望题,必定和度数有关系(往往和高斯消元也有联系,但这里显然不是)。设x点到y点的期望是exp[x−>y]exp[x->y]exp[x−>y],设点xxx的度数为dxd_xdx​,那么这个走出这个点的期望步数是1/dx+1/dx∗(exp[y−>x]+1)1/d_x+1/dx*(exp[y->x]+1)1/dx​+1/dx∗(exp[y−

2020-12-06 20:44:19 145

原创 P6046 纯粹容器(概率期望,期望转化成概率求和)

题意:给个长度为n的数组,保证数组中的数字两两不相等,每次操作选择两个相邻的数字进行决斗,大的胜利,小的踢出去,总共进行n-1次决斗。求原始位置上每个数能存活轮数的期望。数据 :1 4 2 3 5分析总结:拿到题目先不要瞎想,去找一些等价的隐藏条件。在这道题目中,首先想怎么计算答案,设能存活的轮数的期望是套路性地将期望转化成概率求和。这个可以画个期望x>=1的概率表理解下。然后设当前数是i,前一个比当前数大的数的坐标是prei,后一个比当前数大的数的坐标是sufi,当前数在这在当前死去的

2020-12-06 20:30:13 253

原创 P3292:幸运数字:倍增lca+倍增线性基

给定一颗树,求树上任意两点之间简单路径的最大异或和思路:树上任意两点的简单路径就是a到lca(a,b),再从lca(a,b)到b。学过lca的可以联想到这道题可以用倍增的思想来预处理每个结点往上走2^k步的路径的线性基。没错,这道题就是从这个角度来想,这样每次查询就可以快速的求得树上任意两点之间路径的线性基。 求解的过程就是倍增的跳,合并每次跳的点的线性基,当前这个点i往上跳k步,就合并当前这个点e[i][k]这个线性基。const int N = 2e4 + 5, M = 16;int dp[N

2020-11-29 20:49:28 105

原创 P3265 [JLOI2015]装备购买(线性基的本质)

线性基的本质:装备购买题意:给出n个m维的向量,如果一个向量可以通过若干其他向量来表示,则这个向量不用购买,给每个向量一个cost,求最小费用,使得每个向量都可以通过选择购买的向量表示,经典问题,可从线性基模板联想,只不过是把数的01异或变成了向量减法,按cost大小插入线性基中。const int N = 505;int n, m;template<class T>struct Vector { T a[N];//向量的维度 void init() { for (int i =

2020-11-19 16:12:06 96

原创 牛客网,和与或(状态压缩)

题意:给你一个数组R,包含N个元素,求有多少满足条件的序列A使得0 ≤ A[i] ≤ R[i]A[0]+A[1]+…+A[N-1]=A[0] or A[1]… or A[N-1]思路:等式成立的前提是如果某一二进制位上存在1,那必定是由N个元素中某一个提供,除这个数外的其他数,这一位上只能是0。#include<bits/stdc++.h>#define f(i,a,b) for( int i=a;i<=b;++i)#define ff(i,a,b) for( int i=a

2020-11-17 11:29:15 226 1

原创 C. Sasha and Array(线段树+矩阵快速幂)

题意:给出一个序列a,给出两种操作,操作1:对a数组中[l,r][l,r][l,r]范围的内的数加上一个数x,操作2:查询[l,r][l,r][l,r]范围内的f[a[i]]f[a[i]]f[a[i]],其中f[x]f[x]f[x],是指第x个斐波那契数。思路:显然对于第一种操作,这里需要用到区间修改,所以要用到懒标记的线段树,对于第二种操作,可以很快地想到用矩阵加速递推式。于是开一个结点信息是矩阵的线段树,维护每个点的斐波那契和,懒标记写成转移矩阵的幂次,就可以非常清晰做出来这题。const int

2020-11-11 11:00:21 139

原创 F. Kuroni and the Punishment(随机化)

ll a[N],n;vector<ll> fac;set<ll> st;void get_fac(ll x){ for (ll i = 2;i*i <= x;i++) { if (x%i == 0) { fac.emplace_back(i); while (x%i == 0)x /= i; } } if (x > 1)fac.emplace_back(x);}int main(){#ifndef ONLINE_JUDGE

2020-11-06 09:08:55 130

原创 CF123E Maze(数学期望,dfs求子树和)

题意:给你一个n-1个结点的树,给出每个点作为入口和出口的概率。求从入口走到出口的期望步数。分析:当考虑一个点为入口,其他点如果在出口之前被dfs过,则出现2次,否则出现1次,当出口确定,一个点在之前被访问的概率是1/2(类似于插空,可以往前插,可以往后插)。现在考虑一个点为出口(它的概率是chu[u]),先dfs出子树中结点的个数和以子树中结点为入口的概率,这个子树对期望的贡献就是sz[i]∗sumpro[i]∗chu[u]sz[i]*sumpro[i]*chu[u]sz[i]∗sumpro[i]∗ch

2020-11-03 21:06:50 208

原创 E. Martian Strings(kmp前后缀拼接)

给出一个文本串s,100个模式串,每个模式串长度不超过1000,求有几个满足存在a<=b<c=da<=b<c=da<=b<c=d,使得s[a..b]+s[c..d]=ts[a..b]+s[c..d]=ts[a..b]+s[c..d]=t,先求一遍模式串前缀最左出现位置,存起来,再倒着来一遍,求后缀最优出现位置,不能判断时看看是否相交。const int N = 1e5 + 5;int nxt[N];char s[N], ins[N];char tmp[1005],

2020-10-29 14:05:23 132

原创 P1117 [NOI2016]优秀的拆分(后缀数数 or hash+差分)

思路:直接上后缀数组可以通过求lcp把本来的问题从N3N^3N3降到N2N^2N2,但是这样还是有4.5e8的复杂度,只能95分。再次考虑优化。假设在枚举AABB中A的长度len时,考虑对字符串按照len进行分块,例如len=2,把s=“abababab”,分成s=“ab ab ab ab”,这样len为2的A顶多出现在两个块中,然后考虑前后拼接,维护一个正向的后缀数组,一个反向的后缀数组,这样在枚举每一段时就可以知道然后就在每次枚举相邻的两个块,求lcp,lcs,差分记录对区间的贡献。总结:多造样例,

2020-10-27 15:04:30 181

原创 2020年第一周赛事(浙江省赛,秦皇岛)

day1:浙江省赛比赛准备:记不清是几点开始准备设备的,大概是10点钟把设备调试好了,志愿者为我们准备好了所有东西,我们学校是9支队伍参赛。10点多看到了崇拜已久的黄磊学长,非常的帅气。11点多开始验证,因为参加过计量的校赛和省赛官方热身赛,验证过程非常顺利。比赛过程:按照前几年省赛的套路前面是有很多思维题的,今年倒是不然。直到看到榜单有人过了K,我和队友开始读K,我迅速得出一个结论,上机27min 1A。我们继续跟榜读题,发现I也是个结论比较明显的题,dzl 57min 1A 。然后继续做。。。此

2020-10-26 19:53:19 159 2

C语言教材.md

C语言教材.md

2022-11-16

空空如也

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

TA关注的人

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