自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

繁凡さん的博客

「无他,唯手熟尔」人生亦繁亦不凡!

  • 博客(45)
  • 收藏
  • 关注

原创 【动态规划】状态压缩动态规划

一、集合类状态压缩A、 AcWing 91. 最短Hamilton路径状压DP基础应用#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int f[1 << 20][20];int w[20][20];int n, m;int main(){ scanf("%d", &n); for(int i = 0; i <

2020-08-31 12:47:00 305 5

原创 Codeforces Round #665 (Div. 2) 题解( 小学奥数专场 )

目录A、Distance and Axis(简单高中数学应用题)B、Ternary Sequence(分类讨论)C、Mere Array(GCD的性质)D、Maximum Distributed Tree(树上贪心)E、Divide Square(计算几何)F、Reverse and Swap(线段树、实现 区间翻转, 区间交换)A、Distance and Axis(简单高中数学应用题)若k>nk>nk>n,那么直接将 AAA 点移动到 kkk 位置是最优的。否则我们设 BB

2020-08-30 00:17:54 128

原创 CodeForces - 1401 F Reverse and Swap(线段树, 区间翻转, 区间交换,清晰易懂)

CodeForces - 1401 F Reverse and Swap(线段树, 区间翻转, 区间交换)第一个第四个用线段树比较容易了。第二个和第三个都是在分成 2 ^ k 长度区间操作,比较容易想到线段树就是分成 n+1 层,每层都由 2 ^ k 长度区间构成。规定根节点为第 n 层,叶子节点为第 0 层。先看第三个swap:相当于交换线段树两个相邻区间,也就是相当于访问的时候直接访问另一个区间即可。可以用一个变量来记录以下是否需要改变访问的左右结点。比如当前swap的是第 k 层 ,那么只需要

2020-08-30 00:17:27 220

原创 POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)

poj 2411 Mondriaan’s Dream(最清晰的状压DP解析)闫氏DP大法好我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样摆放的小方格总方案数 等价于 横着摆放的小方格总方案数遍历每一列,i列的方案数只和i-1列有关系第i - 1行的状态k能转移到第i行的状态j,当且仅当j & k == 0, 即第i列和第i - 1列的每一行都没有连续两个横向棋子重叠放置st[j | k] == true i - 1 即第i列和第i - 1列合并以后(要合

2020-08-29 19:48:49 461 1

原创 luogu P3391 【模板】文艺平衡树(FHQ - treap,懒惰标记)

我们把每个查询区间使用solit分裂成[1 l−1][l r][r+1 n][1~l-1][l~r][r+1~n][1 l−1][l r][r+1 n]三个区间。再把[l r][l~r][l r]区间的根节点标记lazetage,三个区间合并时pushdown更新,我们要求整个区间实现翻转,可以直接交换左右儿子即可,因为整棵树是一个严格的小根堆,满足小根堆的性质,/*平衡树实际上画出来是一颗乱糟糟的小根堆,但是满足小根堆的.

2020-08-29 11:52:58 95

原创 【数学专题】 筛质数、分解质因数和快速幂

【数学专题】 筛质数、分解质因数和快速幂

2020-08-26 23:04:18 143

原创 模板 - 分解质因数(试除法分解质因数、Pollard Rho因数分解、快速阶乘质因数分解)

整理的算法模板合集: ACM模板试除法分解质因数void divide(int x){ for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) { int s = 0; while (x % i == 0) x /= i, s ++ ; cout << i << ' ' << s << en

2020-08-26 22:34:08 420 2

原创 模板 - 质数筛法(线性筛法、二次筛法)

整理的算法模板合集: ACM模板线性筛法int primes[N], cnt;bool vis[N];void init(int x){ vis[1] = vis[0] = 1; for(int i = 2; i <= x; ++ i){ if(!vis[i])primes[cnt ++ ] = i; for(int j = 0; primes[j] * i <= x; ++ j){ vis[primes[j]

2020-08-26 22:14:27 262

原创 【动态规划】状态机模型

A、抛砖引玉 - AcWing 1049. 大盗阿福AcWing 1049. 大盗阿福本题比较简单,主要起到一个抛砖引玉的作用。我们可以很容易地想到转移方程:f[i]=max(f[i−1],f[i−2]+w[i])f[i] = max(f[i - 1] ,f[i - 2]+w[i])f[i]=max(f[i−1],f[i−2]+w[i])我们尝试使用状态机模型解决这一类问题。什么是状态机模型?状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。实际上就是我们利用一个类

2020-08-26 16:02:41 275

原创 luogu P5142 区间方差(线段树、乘法逆元)

luogu P5142 区间方差本题要求维护模区间方差,很明显是一道数据结构题。我们化简方差公式:而平均数等于可以发现,我们只需要维护序列的区间和和区间平方和,就可以维护平均数和方差。区间和和区间平方和都满足结合律,因此可以用线段树维护。题目要求分数取模, 所以我们使用乘法逆元即可。最终答案为psum−sum2n%mod\frac {psum - sum^2}{n}\%modnpsum−sum2​%mod=(psum∗nmod−2%mod+(sum∗nmod−2%mod)2)%mod

2020-08-26 10:16:35 99 1

原创 AT5198 01 Matrix(构造)

AtCoder简单构造。我们直接把矩阵按照a和b横竖切开两刀,分成四份,这样左上角全填1和右下角全填1,剩下的全填0,因为要求最小值为a/b,那么这种方法就一定可以构造成功,因为另一半要么大于a,答案就是最小值a,要么小于a,答案会更小,同样满足要求。#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;const

2020-08-24 16:13:06 72

原创 luogu P2053 [SCOI2007]修车(费用流提前计算)

P2053 [SCOI2007]修车要求平均时间最短,就等同于要求总时间最短。一个人维修所花的时间,对同一位技术人员之后维修造成的影响是已知且固定的。那么,我们将费用提前计算。即将第 i 位车主的车由第 j 位维修人员倒数第 k 个维修所花的时间(费用)当作 k×tik×t_ik×ti​ , jjj(对于一个修车工先后用W1−WnW_1-W_nW1​−Wn​的几个人,花费的总时间是Wn∗1+Wn−1∗2+...+W1∗nW_n*1+W_{n-1}*2+...+W_1*nWn​∗1+Wn−1​∗2+..

2020-08-24 00:18:08 60

原创 luogu P4085 [USACO17DEC]Haybale Feast(尺取法 + 线段树)

C、luogu P4085 [USACO17DEC]Haybale Feast题目链接直接开一个线段树维护即可。注意开ll线段树维护最大值。注意下标别写错了,比如tr[r]#include<cstdio>#include<algorithm>#include<iostream>using namespace std;typedef long long ll;const int N = 500007, INF = 0x3f3f3f3f;int n

2020-08-23 23:28:21 56

原创 HDU - 6486 Flower(思维)

HDU - 6486 Flower题目大意:有n堆草每次只能对n-1堆操作每次只能减1问最少操作几次能把这些草剪到相同高度如果不能输出-1我们让n-1个数减1实际上可以看成使得剩下的那一个数加1。所以问题的答案很明显就是每一个数与最大数的差值。让我们考虑一下边界。我们要让所有的数相等,所以每次减的时候由于相当于使得剩下的那个数加1,所以每次减都一定会减到最大的数,所以如果总操作次数>=maxx,最大数不够减,就会失败,输出-1。样例:5 8 9 105 7 8 95 6 7 8

2020-08-23 08:12:25 130

原创 模板 - 费用流

整理的算法模板合集: ACM模板文章目录一、最小费用最大流类dinic模板二、最大费用最大流解决二分图带权最大匹配三、费用提前计算+动态开点一、最小费用最大流类dinic模板时间复杂度为O(nmf)O(nmf)O(nmf), fff 为最大流量, 效率较高,一般不会被卡#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<queu

2020-08-22 11:21:58 148

原创 模板 - FQH - treap 非旋平衡树

整理的算法模板合集: ACM模板#include<bits/stdc++.h>using namespace std;const int N = 100007;int n, m, tot, root;struct node{ int l, r; int key;//权值 int val;//平衡因子 int size;//子树个数}tr[N];void pushup(int p){ tr[p].size = tr[tr[p].l]

2020-08-21 23:13:50 156

原创 P5357 【模板】AC自动机(二次加强版)(AC自动机建fail树dfs求模式串出现次数)

P5357 【模板】AC自动机(二次加强版)(AC自动机建fail树dfs求模式串出现次数)传送门形式上,AC 自动机基于由若干模式串构成的 Trie 树,并在此之上增加了一些 fail 边;本质上,AC 自动机是一个关于若干模式串的DFA(确定有限状态自动机),接受且仅接受以某一个模式串作为后缀的字符串。 并且,与一般自动机不同的,AC 自动机还有关于某个模式串的接受状态,也就是与某个模式串匹配(以某个模式串为后缀)的那些状态,即某个模式串在 Trie树上的终止节点在 fail 树上的整个子树。

2020-08-21 18:27:50 114

原创 《PLACEBO》(安慰剂)米津玄師/野田洋次郎 (罗马音、歌词、汉译)

《PLACEBO》(安慰剂)米津玄师 / 野田洋次郎作曲 : 米津玄師作词 : 米津玄師分享米津玄師/野田洋次郎的单曲《PLACEBO (安慰剂)》: https://y.music.163.com/m/song/1466598054/?userid=510794975 (来自@网易云音乐)梦 幻 联 动熱 っぽ い 夢 を 見 て し ま って   君 の そ の 笑顔 で   絆 さ れ た 夕暮れ我 做 了 个 有 些 燥 热 的 梦 连 暮 色 也 缠 裹 着 你 的 笑 容net

2020-08-21 15:57:02 2822

原创 春愁(shunshu)—Mrs. Green Apple (歌词、汉译、罗马音)

春愁ーーMrs.GREEN APPLE作曲 : Motoki Ohmori作词 : Motoki Ohmori分享Mrs. GREEN APPLE的单曲《春愁 (Shunshu)》: https://y.music.163.com/m/song/538290027/?userid=510794975 (来自@网易云音乐)「早いものね」と心が嗫いた「はやいものね」とこころがささやいた 心里念着 「时间过得真快啊!」「ha ya I mo no ne」to kokoro ga sasayai

2020-08-21 15:35:44 2298 1

原创 【高级数据结构】并查集

A、AcWing 1250. 格子游戏#include<bits/stdc++.h>using namespace std;const int N = 500007;int n, m;int fa[N];bool flag;int get(int x, int y){ return x * n + y;}int find(int x){ if(fa[x] == x)return x; return fa[x] = find(fa[x]);}

2020-08-20 16:15:54 86

原创 平衡树 - treap

整理的算法模板合集: ACM模板operator 1 : 插入一个数operator 2 : 删除一个数operator 3 : 通过数值找排名operator 4 : 通过排名找数值operator 5 : 找到严格小于key的最大数(前驱)operator 6 : 找到严格大于key的最小数(后继)/*P3369 【模板】普通平衡树*/const int N = 100010, INF = 1e8 + 7;int n, m;struct node{ int l, r;//左

2020-08-20 13:00:48 184

原创 【数据结构】平衡树 - treap

treap = tree + heap 树堆(treap:让BST尽量随机)动态维护一个有序序列对于一个大根堆:最大值:一直往右走最小值:一直往左走treap实现操作set实现①插入insert②删除(使其变成叶子节点)erase③找前驱(中序遍历的前一个位置)/后继(中序遍历的后一个位置)lower_bound④找最大/最小begin(),end();⑤求某个值的排名无⑥求排名是k的数是谁无⑦比某个数小的最大值 ( 这个数可以不

2020-08-20 12:57:27 113

原创 模板 - 最小割(常见最小割题型技巧总结)

目录模板记录方案求割边数量最大流最小割定理最小割 = 最大流模板//SHOI 2007 善意的投票/*n个人有两种不同的意见并且有许多朋友,需要让朋友间尽可能的统一意见(少发生冲突),如果一个人违反自己的本意也算冲突,求最少的冲突*/typedef long long ll;typedef pair<int,int> PII;const ll INF = 1e18;const int N = 5e2+7;const int M = 2e5+7;int head[N],ne

2020-08-19 22:43:13 171

原创 P2057 [SHOI2007]善意的投票 (最大流最小割)

P2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查最小割,两种意见可以看作源点S和T,我们需要做的是割最少的边使得S和T成为两个不同的集合,解释:割掉的边相当于1次冲突(因为若某边被割走,则显然这条边相连的两个点分别通向了S和T,所以算是一次冲突),当S和T还连通时则必然存在一条路径,这样肯定会有冲突,所以需要使得S和T孤立。实现时这样建图:直接将S连向同意的人,T连向不同意的人,若两人是朋友,则在他们之间连一条双向边(这里有些人不理解:若两个人有冲突,则只需要其中任意一个人

2020-08-19 21:58:48 88

原创 最大流(Edmonds-Karp,Dinic,ISAP,Push-Relabel 预流推进算法)

整理的算法模板合集: ACM模板目录Edmonds−KarpEdmonds-KarpEdmonds−KarpDinicDinicDinicISAPISAPISAPPush−RelabelPush-RelabelPush−Relabel 预流推进算法通用的预流推进算法HLPP 算法Edmonds−KarpEdmonds-KarpEdmonds−KarpEK 算法的时间复杂度为O(nm2)O(nm^2)O(nm2),一般可以处理10310^3103 ~ 10410 ^4104的数据/*luogu P2

2020-08-19 18:19:36 610

原创 洛谷8月赛Div.2

A、P6745 『MdOI R3』Number一道简单的模拟题,我用的字符串string做的,特判很多,写的很麻烦。#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<iostream>using namespace std;const int N =1000007, INF = 0x3f3f3f3f;int n;stri

2020-08-16 22:57:47 123

原创 HDU 5385 The path(贪心、构造、最短路径树)

HDU 5385题目大意:给定一个图,dis表示第i个点到1点的最短路,dis1=0,给有向图上的边赋权值(1~n)满足dis1<dis2<dis3<……<disk>disk+1>……disn。dis1<dis2<dis3<……<disk>disk+1>……disn。dis1<dis2<dis3<……<disk>disk+1>……disn。注意是一个有向连通图,最后要求距离形成一个三角形,也就是

2020-08-16 20:57:15 90

原创 可持久化数据结构

可持久化的前提:本身拓扑结构不变可持久化解决问题:记录数据结构的所有历史版本核心思想:只记录每一个版本与上一个版本不一样的地方如线段树:每次修改最多logn点可持久化trie树上一个版本的trie树种有这个字母的指针就直接copy过来,没有当前版本就新开一个指针。数据最多 2242^{24}224 ,每次最多加 252525 个点,所以开 252525 倍数组4.5X10^7个点X4/10^6 = 180MB 如果超过了题目所限我们可以根据题目给的空间反推我们能开多大P4735

2020-08-12 22:57:57 133 1

原创 P4735 最大异或和(可持久化trie树、求最大区间异或和)

P4735 最大异或和我们维护一个前缀异或和:s[i]=a[1] xor a[2] xor …a[i−1] xor a[i]s[i] = a[1] \ xor\ a[2]\ xor\ … a[i-1] \ xor\ a[i]s[i]=a[1] xor a[2] xor …a[i−1] xor a[i]则a[p] xor a[p+1] xor&nbs

2020-08-12 22:47:35 120

原创 Luogu P4105 [HEOI2014]南园满地堆轻絮

最小化最大值,一眼就能看出来要二分。我们先通过题目中花里胡哨的方法构造出数据,然后因为题目中修改次数无限,随意修改,我们只要求修改差值的最大值,也就是说我们只需要维护最大值即可。我们只要找到差值最大的逆序对,答案就是最大的逆序对的一半。因为作为逆序对,前面的大于后面,差值最大的两个最终必须都要相等(因为要求最后的序列非严格单调递增,可以相等),那么我们不论是高的降低,还是低的增加,需要改的都是这个差值,肯定是一半最优。这样我们就可以O(n)O(n)O(n)解决。#include<iostream

2020-08-08 22:48:52 60

转载 置换群和Burnside引理,Polya定理

定义简化版:置换,就是一个1~n的排列,是一个1~n排列对1~n的映射置换群,所有的置换的集合。经常会遇到求本质不同的构造,如旋转不同构,翻转交换不同构等。不动点:一个置换中,置换后和置换前没有区别的排列Burnside引理:本质不同的方案数=每个置换下不动点的个数÷置换总数(一个平均值)Polya定理:一个置换下不动点的个数=颜色^环个数。(辅助Burnside引理,防止枚举不动点复杂度过高) 这篇文章写得很详细了(具体的在此不说了):Burnside引理与Polya...

2020-08-08 21:31:41 168

原创 HDU - 5637 Transform (思维、bfs预处理)

HDU - 5637题目大意:给出n个数的序列a,对于一个整数x,有两种操作:1.改变x二进制中任一位2.将x变为x^a[i]m次查询,每次查询输入两个整数x和y,问x最少经过多少次操作可以变成y求最少多少次操作可以值得x变成y实际上不就是一个“迷宫求最短路”嘛。这里是状态转移到另一个状态的最短路,也就是直接bfs即可。易得最先转移到的就是最短路。数据比较大m有1e5,每次输入数据再爆搜肯定要超时。因为这里都只涉及到异或操作。我们发现s^(t[1]^t[2]^...t[j])=t。因为

2020-08-08 21:07:40 74

原创 模板 - 树状数组

整理的算法模板合集: ACM模板树状数组求逆序对#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>using namespace std;typedef long long ll;const int N = 5000000;int n,m;struct node{ int vis,id; bool operator<(c

2020-08-08 11:00:41 201

原创 解题报告:luoguP6685 可持久化动态仙人掌的直径问题

好难的静态仙人掌

2020-08-06 22:03:35 160

原创 解题报告:luoguP1462 通往奥格瑞玛的道路(二分、最短路)

我们直接二分答案,二分过路费,每次Dij判断走所有小于当前mid的路能否到达终点且最短路(总扣血)小于最大血量。因为数据中过路费最大为1e9, log2(1e9)<30log_2(1e9)<30log2​(1e9)<30所以总时间复杂度为O(30∗nlogn)O(30 * nlogn)O(30∗nlogn),而n为1e41e41e4 ,所以稳过#include<queue>#include<iostream>#include<cstdio>.

2020-08-06 20:29:32 73

原创 【数据结构专题】线段树(一)

题目算法A、AcWing 1275. 最大数线段树求区间最大值B、SP1043 Can you answer these queries III线段树求最长连续子段和C、AcWing 246. 区间最大公约数求区间最大公约数这里写目录标题A、AcWing 1275. 最大数B、SP1043 Can you answer these queries IIIC、AcWing 246. 区间最大公约数本系列博客为AcWing的算法提高课的听课笔记,包含一些yxc老师...

2020-08-06 18:46:11 135

原创 解题报告:SP1043 GSS4 - Can you answer these queries III(GSS线段树八部曲之三)(区间最大连续子段和)

要注意输入的数据有坑,x可能大于y…我们可以模块化编程,使得整个代码井井有条函数可以重名,只要参数不一样就行。来源yxc老师的上课板书然后就是简单的代码了#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;typedef long long ll;const int N = 500007;int.

2020-08-06 16:37:07 66

原创 解题报告:SP2713 GSS4 - Can you answer these queries IV(GSS线段树八部曲之四)

x>yx>yx>y是真的艹。然后就是一道模板题了。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 500007;int n, m;ll a[N];struct Tree{ int l, r; ll sum;}tr[N * 4];void pushup(int p){ tr[p].sum = tr[p << 1.

2020-08-06 16:25:45 70

原创 解题报告:luogu P1688 新单词接龙问题【trie树、dfs、DP递推】

单词的变化有三种:1删掉一个字母,2:插入一个字符,3:将一个字符变成另外一个字符dig→fig→fin→fine→winedig→fig→fin→fine→winedig→fig→fin→fine→wine要求保证字典序从小到大,那么我们在变换的时候直接对于一个字符串的当前字母,从a到z遍历根据题意变换,那么所有能连接上(变成完全一样的字符串)的顺序就是按照字典序升序的。假设我们已经知道了从第 i+1i+1i+1 (1<=i+1<=n)(1 <= i+1 <= n)(1&l.

2020-08-05 22:36:32 99

原创 【搜索专题】DFS之连通性模型与搜索顺序

内部搜索不用(能)回溯,外部搜索才需要(必须)回溯和恢复现场A、AcWing 1112. 迷宫内部搜索的一道dfs模板题,别忘了vis#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int N = 110;int a[N];int n, m;int k;char g[N][N];int sx, sy, ex, ey;bool vis

2020-08-05 16:53:19 143

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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