算法学习

文章目录

  • 摘要
  • 基础算法
    • 二分
    • 倍增
    • 前缀和
  • 构造
  • 图论
    • bfs
    • dfs\dfs序
    • 同余最短路
    • 差分约束
    • LCA
    • 基环树
  • dp
    • 线性dp
    • 概率期望
    • 背包dp
    • 树形dp
    • 数位dp
    • 状压dp
    • 区间dp
    • 计数dp
    • 数据结构优化dp
  • 数据结构
    • 树上启发式合并
    • 主席树
    • Splay
    • 线段树分治
    • Kruskal重构树
  • 数论
    • 基础数论

摘要

发现前面学的东西都忘得差不多了,想复习也找不到原来写的题了,所以从今天开始记录一下学习算法的足迹。

基础算法

二分

Codeforces Round #686 (Div. 3) F. Array Partition
求满足max(1,x)=min(x+1,y)=max(y+1,n)max(1,x)=min(x+1,y)=max(y+1,n)max(1,x)=min(x+1,y)=max(y+1,n)len1=x,len2=y−x,len3=n−ylen1=x,len2=y-x,len3=n-ylen1=x,len2=yx,len3=ny 。根据minminminmaxmaxmax具有二分的性质,直接在二分的时候判断两个条件来调整l,rl,rl,r即可。

倍增

Codeforces Round #717 (Div. 2) D. Cut 倍增
一个比较巧妙的在序列上的倍增,启发了能跳一步,就可以用二进制倍增一下子跳很多步。

前缀和

Codeforces Round #619 (Div. 2) E. Nanosoft 思维 + 二维前缀和

构造

Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)
根据x=(x+1)moda,y=(y+1)modbx=(x+1)\bmod a,y=(y+1)\bmod bx=(x+1)moda,y=(y+1)modb的方式来构造每个点所在的每行每列都不相等的矩阵。
Codeforces Round #712 (Div. 2) D. 3-Coloring 交互 构造
奇偶构造,让后第三种颜色放非空的位置。
Codeforces Round #609 (Div. 2) D. Domino for Young 黑白染色
进行黑白染色,可以将1×21×21×2的多米诺骨牌进行匹配,答案为小的那个颜色。
Codeforces Round #619 (Div. 2) D. Time to Run 矩阵回路构造

图论

bfs

Codeforces Round #619 (Div. 2) F. Super Jaber 多源bfs + 思维转换

dfs\dfs序

P3605 [USACO17JAN]Promotion Counting P
配合树状数组解决一类子树统计问题,比如这个题就是统计pj>pip_j>p_ipj>pi的个数。

Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)
模型抽象 + 问题转化。

同余最短路

通常伪装成一类数论题。

跳楼机
板子题,用x,y,zx,y,zx,y,z组成hhh

墨墨的等式
板子题,看到这一类的式子应该很快想到同余最短路,让后将[l,r][l,r][l,r]的区间转化为前缀区间即可。

GYM Sums
上一题的简化版,这个题只问了能否组成xxx,那么只需要x>=dis[xmodbase]x>=dis[x\bmod base]x>=dis[xmodbase]即可。

Lazy Running HDU - 6071 好题
分层 + 同余最短路

差分约束

E. Capitalism
根据aj=ai+1a_j=a_i+1aj=ai+1构造不等式,让后判断是否有负环,且由于这个题的特殊性,还要判断是否为二分图。

LCA

Codeforces Round #620 (Div. 2) E. 1-Trees and Queries 思维 + LCA
比较巧妙的一个题,多加一条边可能改变路径的奇偶性。

基环树

Codeforces Round #686 (Div. 3) E. Number of Simple Paths
基环树,求路径长度>=1>=1>=1的路径个数。用总情况n∗(n−1)n*(n-1)n(n1)减去在一棵树的情况se[i]∗(se[i]−1)/2se[i]*(se[i]-1)/2se[i](se[i]1)/2即为答案。

dp

线性dp

E2. Square-free division (hard version) 题解
预处理出来leftleftleft数组方便找能转移的位置,让后直接dp转移就行啦。

概率期望

P5104 红包发红包
www的红包,第kkk个人抢到的钱的期望为w2k\frac{w}{2^k}2kw

游走
在DAG上路径长度的期望,f[i]f[i]f[i]表示到iii这个点的总长度,g[i]g[i]g[i]表示到iii这个点路径的总个数。

Codeforces Round #604 (Div. 2) E. Beautiful Mirrors 题解
111走到nnn,失败了就回111号点,求到nnn期望步数。主要理解一下回到起点的一部分。
f[i]=(f[i−1]+1)∗pi100+(f[i−1]+f[i]+1)∗100−pi100f[i]=(f[i-1]+1)*\frac{p_i}{100}+(f[i-1]+f[i]+1)*\frac{100-p_i}{100}f[i]=(f[i1]+1)100pi+(f[i1]+f[i]+1)100100pi

SP1026 FAVDICE - Favorite Dice
一个n面的骰子,求期望掷几次能使得每一面都被掷到。求出概率,让后期望=1/概率得出答案即可。

绿豆蛙的归宿
基础期望dp,建反图逆推就好啦。

CF1042E Vasya and Magic Matrix
列出普通式子,让后把平方拆开,维护一下变量O(1)O(1)O(1)转移即可。

背包dp

AT F - Potion
f[i][j][k]f[i][j][k]f[i][j][k]表示前iii个数选了jjj个且modlen\bmod \ \ lenmod  lenkkk

树形dp

Codeforces Round #701 (Div. 2) E. Move and Swap 思维 + dp
去绝对值优化转移。

数位dp

AtCoder Beginner Contest 194 F - Digits Paradise in Hexadecimal
比较裸的数位dpdpdp了,说一下状态吧:设dp[pos][state][flag][lead]dp[pos][state][flag][lead]dp[pos][state][flag][lead]为到了pospospos位置,状态为statestatestate,是否能枚举到上界flagflagflag,以及是否存在前导零leadleadlead

Palindromic Numbers LightOJ - 1205
用数位dpdpdp[l,r][l,r][l,r]有多少个回文数。我们只需要记一下每次选的数,让后dpdpdp状态设计加上回文开始的位置preprepre以及当前是否为回文就可以表征出这个数字的状态了。

状压dp

Educational Codeforces Round 80 (Rated for Div. 2) 二分 + 状压
O(n∗2n)O(n*2^n)O(n2n)递推子集。
Codeforces Round #622 (Div. 2) D. Happy New Year 状压dp
根据区间涉及状态,将区间离散化,成为左闭右开的区间,信息都存在左端点,先删后加。

区间dp

Codeforces Round #715 (Div. 2) C. The Sports Festival 区间dp
aaa数组排序之后就是个裸的区间dpdpdp了,可以只从两头转移,复杂度优化成O(N2)O(N^2)O(N2)

计数dp

Educational Codeforces Round 81 (Rated for Div. 2) F.Good Contest \ 洛谷 划艇 组合 计数dp

数据结构优化dp

Educational Codeforces Round 81 (Rated for Div. 2) E. Permutation Separation 线段树 + dp
通过线段树区间加法,以及维护全局最小值,可以优化dpdpdp过程。
Codeforces Round #620 (Div. 2) F2. Animal Observation (hard version) dp + 线段树
优化区间转移。

数据结构

树上启发式合并

CodeForces - 208E Blood Cousins
树启板子,将原本询问与xxxppp级祖先相同的个数转化成祖先的ppp级儿子有几个,减一即为答案。把询问存到每个点上,维护一下子树的depthdepthdepth,更新即可。

CodeForces - 570D Tree Requests
每次询问vvv对应的子树中,深度为hhh的这层节点的字母,能否打乱重排组成回文串。定义一个c[i][j]c[i][j]c[i][j]表示深度为iii,字母j+′a′j+'a'j+a有几个,让后在定义一个flag[i]flag[i]flag[i]表示深度为iii有几个字母出现了奇数次,让后当flag[i]<=1flag[i]<=1flag[i]<=1的时候可以,否则不可以。

CodeForces - 600E Lomsat gelral
问子树中出现次数最多的节点编号之和。经典入门题了,不多说。

CodeForces - 1009F Dominant Indices
d(u,i)d(u,i)d(u,i)表示uuu子树到uuu距离为iii的个数,对每个uuu求最小kkk使得d(u,k)d(u,k)d(u,k)最大。定义一个cnt[i]cnt[i]cnt[i],让后更新ididid即可。最后删除子树的时候不要忘记更新maxmaxmaxididid000

CodeForces - 375D Tree and Queries 题解 好题
cntcntcnt维护>=kj>=k_j>=kj的颜色个数,可以省掉一层lognlognlogn

2019 ICPC Asia Nanchang Regional K.Tree
树启 + 动态开点。

CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths
树启 + 状压 好题。需要用到dsudsudsu遍历的顺序,先遍历轻儿子,清空轻儿子,才遍历重儿子,所以修改全局的值不会影响到后来遍历的重儿子的值。

主席树

主席树求mex
维护每个数最后出现的位置,在第rrr棵树上找出现位置<l<l<l的最小值即可。
2016中国大学生程序设计竞赛(长春)Sequence II HDU - 5919
主席树维护第一次出现的位置,维护区间和,倒着插入即可。
Prefix HDU - 5790 字典树 + 主席树
维护每个前缀最后出现的位置,查询区间和即可。
P2839 [国家集训队]middle 二分 + 主席树 在值域上建区间
中位数建主席树,优化递推求每次的区间。
P3899 [湖南集训]谈笑风生 主席树解决二维数点
dfsdfsdfs序上建树,让后转换成一个深度区间和一个dfsdfsdfs序区间,以深度为下标建立主席树即可。
P3293 [SCOI2016]美味 主席树 + 伪01trie
利用01trie的思想,将树上贪心转换成区间贪心,每次都可以转换成区间询问,让后根据询问结果更新答案即可。
Codeforces Round #716 (Div. 2) D. Cut and Stick 主席树 + 思维
主席树查询区间是否存在出现次数大于n/2n/2n/2的数。

Splay

线段树分治

二分图\模板
将每个边出现的时间在线段树上划分成lognlognlogn段,让后用可撤销并查集维护就好啦。

CF981E Addition on Segments 线段树分治 + bitset优化 题解
将询问区间分成lognlognlogn段,让后从根遍历到最后只有一个点的时候保证了这个点可以成为最大值,因为所有区间都包含这个点,让后每次用bitsetbitsetbitset的左移操作将其加xxx即可。

Kruskal重构树

目前做的题都比较套路,维护边权≤w\le ww能到的连通块。
Network 黑暗爆炸 - 3732 倍增lca || Kruskal重构树
两点的lcalcalca即为最大边。
Peaks加强版 黑暗爆炸 - 3551 Kruskal重构树 + 主席树
找到连通块,dfs序处理一下,即为查询块第kkk大。
P4768 [NOI2018] 归程 Kruskal重构树 + 倍增 + 最短路
最短路预处理。

数论

基础数论

HDU - 4497 GCD and LCM
给三个数的lcmlcmlcmgcdgcdgcd,求满足条件的(x,y,z)(x,y,z)(x,y,z)个数。经典套路把(x,y,z)(x,y,z)(x,y,z)都除个gcd(x,y,z)gcd(x,y,z)gcd(x,y,z),让后对lcm(x,y,z)gcd(x,y,z)\frac{lcm(x,y,z)}{gcd(x,y,z)}gcd(x,y,z)lcm(x,y,z)分解质因子统计数量即可。

Educational Codeforces Round 106 (Rated for Div. 2) D. The Number of Pairs
方法同上,只不过给了个式子没有那么明显。只需要让lcm(x,y)=k∗gcd(x,y)lcm(x,y)=k*gcd(x,y)lcm(x,y)=kgcd(x,y),再进行化简式子就好啦。

Educational Codeforces Round 81 (Rated for Div. 2) D. Same GCDs 欧拉函数
a,ma,ma,m都除gcd(a,m)gcd(a,m)gcd(a,m)之后,答案即为mgcd(a,m)\frac{m}{gcd(a,m)}gcd(a,m)m的欧拉函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s集群部分常见问题处理

目录部分常见问题处理Coredns CrashLoopBackOff 导致无法成功添加工作节点的问题添加工作节点时提示token过期kubectl 执行命令报“The connection to the server localhost:8080 was refused”网络组件flannel无法完成初始化部分节点无法启动pod最后部分常见问题处理结合我们上…

Hyper-V + CentOS7 网络设置(视频教程)

Hyper-V Centos7 网络设置 本文目标&#xff1a;1、 设置虚拟机固定IP&#xff1a;无论物理机的网络环境怎么变化&#xff0c;都需要保持虚拟机的IP地址不变&#xff0c;保证本机使用xshell等终端访问始终用同一个IP地址2、物理机可访问虚拟机&#xff0c;虚拟机是否可访问网络…

P1829 [国家集训队]Crash的数字表格(推了好久的mobius反演)

P1829 [国家集训队]Crash的数字表格 / JZPTAB 推导过程 ∑i1n∑j1mlcm(i,j)\sum_{i 1} ^{n} \sum_{j 1} ^{m} lcm(i, j)i1∑n​j1∑m​lcm(i,j) ∑i1n∑j1mijgcd(i,j) \sum_{i 1} ^{n} \sum_{j 1} ^{m} \frac{ij}{gcd(i, j)}i1∑n​j1∑m​gcd(i,j)ij​ ∑d1n1d∑i1n∑jmi…

Consul的反熵

熵熵是衡量某个体系中事物混乱程度的一个指标&#xff0c;是从热力学第二定律借鉴过来的。熵增原理孤立系统的熵永不自动减少&#xff0c;熵在可逆过程中不变&#xff0c;在不可逆过程中增加。熵增加原理是热力学第二定律的又一种表述&#xff0c;它更为概括地指出了不可逆过程…

HDU 6833 A Very Easy Math Problem

A Very Easy Math Problem 推式子 ∑ai1n∑a21n⋯∑ax1n(∏j1xajk)f(gcd(a1,a2,…,ax))gcd(a1,a2,…,ax)\sum_{a_i 1} ^{n} \sum_{a_2 1} ^{n} \dots \sum_{a_x 1} ^{n} \left(\prod_{j 1} ^{x} a_j ^ k \right)f(gcd(a_1, a_2, \dots, a_x))\times gcd(a_1, a_2, \dots, …

通过Blazor使用C#开发SPA单页面应用程序(2)

今天我们尝试创建一个默认的Blazor应用。.Net Core 3.0需要Visual Studio 2019 的支持。安装.Net Core 3.0 预览版 SDK版本&#xff0c;注意预览版对应的VS版本&#xff0c;我这里安装的是v3.0.0-preview6。一定要开启预览选项才能使用Net Core Preview&#xff0c;在工具> …

通过Blazor使用C#开发SPA单页面应用程序(1)

2019年9月23——25日 .NET Core 3.0即将在.NET Conf上发布! .NET Core的发布及成熟重燃了.net程序员的热情和希望&#xff0c;一些.net大咖也在积极的为推动.NET Core而不懈的努力。在这次.NET Core 3.0中一项新的技术也首次出现在人们的视野&#xff0c;这就是Blazor。说起Bla…

luogu P6178 【模板】Matrix-Tree 定理

luogu P6178 【模板】Matrix-Tree 定理 1.无向图 假设现在给定一个图 G。 度数矩阵D:若存在边$ (x,y,z)(x,y,z)$ ,则 D[x][x]z;D[y][y]z;D[x][x]z;D[y][y]zD[x][x]z;D[y][y]z;D[x][x]z;D[y][y]zD[x][x]z;D[y][y]z;D[x][x]z;D[y][y]z; 邻接矩阵C:若存在边 (x,y,z)(x,y,z)(x,…

基于 WPF 模块化架构下的本地化设计实践

背景描述最近接到一个需求&#xff0c;就是要求我们的 WPF 客户端具备本地化功能&#xff0c;实现中英文多语言界面。刚开始接到这个需求&#xff0c;其实我内心是拒绝的的&#xff0c;但是没办法&#xff0c;需求是永无止境的。所以只能想办法解决这个问题。首先有必要说一下我…

HDU 6836 Expectation(矩阵生成树 + 期望)

Expectation 思路 题目要求每个生成树边权&\&&的期望值&#xff0c;假设当前这颗生成树对二进制数的第iii位有贡献&#xff0c;则这个位上的构成生成树的边权值一定是111&#xff0c;所以我们可以跑313131位二进制数的&#xff0c;矩阵树&#xff0c;每个位上的贡…

你会轻易打破规则吗?

这里是Z哥的个人公众号每周五11&#xff1a;45 按时送达当然了&#xff0c;也会时不时加个餐&#xff5e;我的第「86」篇原创敬上俗话说的好&#xff0c;不以规矩&#xff0c;不成方圆。但是有些时候&#xff0c;可能破坏规则反而是一个更有效的方式&#xff0c;这个时候到底该…

string(STL)

string 优点 常数相对较小&#xff0c;动态分配空间&#xff0c;自定义小于运算符和加法运算符。 转char 可以写成c_str()返回为char指针 获取长度 s.size()和s.lenth() 寻找某字符串第一次出现位置 s.find(t) 截取子串 s.substr(pos,len)长度不足则截取后缀。 访问…

P4449 于神之怒加强版

P4449 于神之怒加强版 推式子 ∑i1n∑j1ngcd(i,j)h\sum_{i 1} ^{n} \sum_{j 1} ^{n} gcd(i, j) ^ h i1∑n​j1∑n​gcd(i,j)h ∑d1ndh∑i1nd∑j1mdgcd(i,j)1\sum_{d 1} ^{n} d ^ h \sum_{i 1} ^{\frac{n}{d}} \sum_{j 1} ^{\frac{m}{d}}gcd(i, j) 1 d1∑n​dhi1∑dn​​…

架构杂谈《十》

常用开发模式一、瀑布式开发瀑布式开发是在1970年提出的软件开发模型&#xff0c;是一种较老的计算机软件开发模式&#xff0c;也是典型的预见性的开发模式&#xff0c;在瀑布式开发中&#xff0c;开发严格遵循预先计划的需求分析、设计、编码、集成、测试、维护的步骤进行&…

B-Donut Drone(循环/分块/DP)

B - Donut Drone 这是一道神题&#xff0c;其中蕴含的思维很巧妙。 在一个循环的二维矩阵中&#xff0c;每个点有一个权值&#xff0c;然后每次一个点只能向右上、正右和右下三个地方中权值最大的地方移动&#xff0c;要求支持两类操作&#xff0c;一种是移动k次&#xff0c;一…

[2020多校A层11.18] 三角田地(因式分解)

[2020多校A层11.18] 三角田地 对于平面上一些点&#xff0c;求解所有与含有边与x轴平行和与y轴平行的三角形面积和 n<100000 显然我们可以讨论每个直角顶点的贡献&#xff0c;然后本质上就是一个经典的数学问题&#xff0c;我们只要求出两个方向上的分量和&#xff0c;然后…

斗地主(矩阵快速幂)

地斗主 思路 看到这nnn非常大&#xff0c;感觉一定是个结论公式题&#xff0c;但是感觉又不像是排列组合&#xff0c;于是可以考虑矩阵快速幂了&#xff0c;所以关键就是得得到递推公式了。 我们将棋盘分成两部分n−num,numn - num, numn−num,num我们假定显然对num1,2,3,4,…

如何删除GIT仓库中的敏感信息

1. 前言正常Git仓库中应该尽量不包含数据库连接/AWS帐号/巨大二进制文件&#xff0c;否则一旦泄漏到Github&#xff0c;这些非常敏感信息会影响客户的信息安全已经公司的信誉。公司可能其它还有相关规定&#xff0c;如禁止私人邮件加入GIT仓库。如果违反这些规定&#xff0c;可…

CF896E Welcome home, Chtholly(分块/并查集/第二分块)

CF896E Welcome home, Chtholly 对于给定一个长度为n(n<1e5)的序列&#xff0c;值域范围为1e5,要求支持两类操作。 将区间[l,r]内所有大于x的数减x查询区间[l,r]内值为x的数的个数 首先由于n和值域同阶&#xff0c;所以我们应该在值域上进行操作&#xff0c;但是这个东西…

ASP.NET Core on K8S深入学习(4)你必须知道的Service

本篇已加入《.NET Core on K8S学习实践系列文章索引》&#xff0c;可以点击查看更多容器化技术相关系列文章。前面几篇文章我们都是使用的ClusterIP供集群内部访问&#xff0c;每个Pod都有一个自己的IP地址&#xff0c;那么问题来了&#xff1a;当控制器使用新的Pod替代发生故障…