自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HDU 3966 + 树链剖分复习 + 视频讲解

树链剖分学习 参考代码:#include <cstdio>#include <algorithm>#include <iostream>#include <vector>#include <map>#include <queue>#include <set>#include <cti...

2020-07-15 13:01:11 1643 4

原创 2020.6.7 假期学习计划

摸鱼:最近一段时间经常摸鱼,为了应付考试,感觉什么也没学进去,每天为了应付考试的任务,刷刷视频,虽然考试的东西弄了点,但一天下来,感觉啥都没学到,当前感觉心里很空。学习目标学习课程学习计划1Mysql至少把买的那本书看完,再在leetcode 上刷50题2git操作至少把基本操作学会3操作系统至少熟悉Linux的基本操作4刷题leetcode上每天2~3题,加周赛补题5算法留出一段时间狂刷动态规划6C++ primer按学长推荐

2020-06-07 11:35:35 188 1

原创 博客上线

我的个人博客已经上线啦~~由于csdn的穿插广告和皮肤付费,让我有点难受,所以我决定自己弄一个适合自己的博客,可以放音乐,可以有自己喜欢的图片等等…虽然有点费精力,但也不枉努力之后的欣喜…Vain的博客...

2020-04-22 18:24:32 175

原创 整数分块

整数分块:解决∑n⌊n/i⌋,i∑n⌊n/i⌋,i∑n⌊n/i⌋,i从 111 开始递增的问题,我们可以打表找一下规律:可以发现每一个出现的区间都是一个块状的,呢么我们计算整体贡献时,我们可以每次找一个块的,然后整体算贡献,这样这个算法的时间复杂度会被优化到O(√n)O(√n)O(√n) 。例题:HDU6555The Fool参考代码:#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 5;typ

2020-11-27 17:18:24 11

原创 分组背包问题

有NNN 组物品和一个容量是 VVV 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vijvijvij,价值是 wijwijwij,其中 iii 是组号,jjj 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,VN,VN,V,用空格隔开,分别表示物品组数和背包容量。接下来有 NNN 组数据:每组数据第一行有一个整数 Si,Si,Si,表示第 $i $个物品组的物品数量;每组数据接下来有

2020-11-16 20:25:45 22

原创 Splay 模板题

先介绍一下BST的性质:BST是一颗左儿子小于当前点权值,右儿子大于当前节点权值的一颗二叉树,这样一棵树有什么好处呢?这样的一棵树十分的强大,因为不管怎么变化这颗树的形状,只要符合以上条件,呢么这颗树的中序遍历都是从小到大的排序。缺点:这样一棵树可能因为某种单调的数据插入,从而退化成一条链,这样最坏的时间复杂度就会演变为O(n)O(n)O(n)的,这是我们不愿意看到的,显然这么强大的数据结构,时间复杂度演变成O(n)O(n)O(n)是谁也不愿意看到的,所以科学家 Tarjan 就优化出了 Spl

2020-11-13 18:43:10 14

原创 2017年CCPC杭州现场赛 Master of Phi (优化二进制枚举子集)

一直感觉枚举子集这种没啥可优化的,直到遇到这题,这题对时间卡的比较死,枚举子集其实是可以写的,但是双层 forforfor 的枚举子集的复杂度是2n2^n2n ∗*∗ nnn,这题是T=100T=100T=100 组输入,n<=20n<=20n<=20,然后我们可以推出贡献可以由枚举子集得到,但是这样最坏的时间复杂度是 OOO(222 2^220^00∗20*20∗20∗100*100∗100) > O(3e8)O(3e8)O(3e8),所以我们可以用完全二叉树形式的 dfs()df

2020-11-11 19:34:59 21

原创 快速排序

对于网上一些博客的讲解,按单向划分方式,我们以数组中最左边的xxx做为划分,然后利用尺取法,小于等于xxx的划分到xxx的左边,大于等于xxx的划分到xxx的右边,然后进行分治划分,这样均摊时间复杂度是O(nlogn)O(nlogn)O(nlogn)的,但是对于最坏的情况(已经排好序),呢么每次划分的区间长度都是按上一次划分的区间长度减 1 的,这样最坏的时间复杂度为 O(n2)O(n^2)O(n2),所以我们需要用另一种方式来划分,从而避免最坏情况的发生,我们划分的值,取中间值,这样就可以避免,区间长度每

2020-11-10 13:30:27 27

原创 P3201 [HNOI2009] 梦幻布丁 启发式合并

思路:把相同颜色的用链表串起来,然后求一下最初值的贡献,然后进行启发式合并,将长度小的颜色的链合并到大的链表上,时间复杂度nlognnlognnlogn参考代码:#include <algorithm>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <ctime>#include <iostream>

2020-11-08 20:40:44 39

原创 2020 ccpc 威海站(打铁感想)

据离威海打铁已经过去一个多星期了,打铁带来的冲击感,目前才缓和了些许,但是回想起来,依然很难受。打铁后,整个人都不怎么自信了,心里生出过不想再打的念头,但是又有很多很多不甘,加入 ACM 工作室两年多了,打了两年多,今年疫情原因,形式不是很好,可能就这一场就结束整个 ACM 生涯了,我们又偏偏打了铁,内心极度的难受。对于我们队的实力,虽然说打铜有点难,但又不是完全没有可能,要我说,我们队有%606060~%707070的可能性拿到铜牌。比赛开始时,我们队是很顺利,率先一A掉 H题,然后当时过的人还是很少

2020-11-05 21:26:20 137 1

原创 AtCoder - abc179_d 前缀和优化dp

题意:给正整数 nnn (n<=1e5)(n<=1e5)(n<=1e5) 和 kkk,kkk代表kkk(k<=10)(k<=10)(k<=10)个区间,求111到nnn 有多少种方案。思路:我们可以发现,第iii个点的答案为前iii个1−i1-i1−i区间答案的累加,而现在我们只知道有kkk个区间可以利用,同理我们类别1−i1-i1−i的方式取,可用区间的元素来构造答案即可。参考代码/* * @Descripttion: fst * @version: *

2020-11-02 21:10:44 43

原创 大质数分解板题(威海)

思路:如果一个数被质因数分解后,产生的素数个数没有重复的,呢么答案就只有一个。参考代码#include<bits/stdc++.h>using namespace std;const int maxn=1e5+5;typedef long long ll;int cnt,ct;ll fac[maxn],num[maxn];ll gcd(ll a,ll b){ return b?gcd(b,a%b):a;}ll multi(ll a,ll b,ll m){

2020-10-27 16:43:37 29

原创 训练 CF 1700分 题解

CodeForces264BCodeForces 264BCodeForces264B GoodSequencesGood SequencesGoodSequences思路:质因数分解后,求当前数的质因数种出现的最大次数,然后当前数的所有质因数赋值当前的最大,进行dpdpdp即可,时间复杂度 O(nlogn)O(nlogn)O(nlogn)/* * @Author: vain * @Date: 2020 * @LastEditTime: 2020-10-06 13:40:49 * @Last

2020-10-22 08:32:17 45

原创 codeforces 833A

题解:(kn)(k^n)(kn)3^33=a∗ba*ba∗b,呢么判断 int(pow(a∗b,1.0/3.0))3int(pow(a*b,1.0/3.0))^3int(pow(a∗b,1.0/3.0))3 = a∗ba*ba∗b 以及 aaa%knk^nkn = 000,bbb%knk^nkn = 0 即可,因为 nnn 轮,每轮必∗k*k∗k,故需要判断 knk^nkn 对 a,ba,ba,b是否合法。参考代码:#include<iostream>#include<vector

2020-10-18 16:12:36 19

原创 A. Guest From the Past 贪心

题目:给 nnn 元钱,然后有塑料瓶的牛奶 aaa 元钱,玻璃瓶的牛奶 bbb 元钱,玻璃瓶可以卖 ccc元钱。问 nnn 元钱最多喝多少瓶牛奶。思路:如果一种样式的牛奶贡献大,那我们就一直喝这个到不能在喝为止,剩下的钱看看还能否喝其他种的牛奶即可,呢么存在两种情况,全喝 aaa 牛奶,剩余的钱只能喝 bbb,反则全喝bbb,剩下的钱全喝 aaa 即可。参考代码:#include<iostream>#include<vector>#include<ctime&gt

2020-10-15 09:42:55 19

原创 2018 南航icpc I 二分图

思路:跑两遍二分图,在第一遍的基础上,在跑一遍二分图,看最大能匹配多少,然后和kkk对比,如果比kkk大则取kkk,反则取第二次的最大匹配。参考代码:#include<iostream>#include<vector>#include<stack>#include<queue>#include<map>#include<unordered_map>#include<unordered_set>#inclu

2020-10-13 21:20:35 17

原创 P1441 砝码称重(01背包+枚举子集)

思路:用010101背包求nnn个数组成不同数的方案数,dp[i]dp[i]dp[i]代表组成能否组成iii,然后用枚举子集求去掉mmm个数的状态集合,来枚举最大方案。参考代码:/* * @Author: vain * @Date: 2020 * @LastEditTime: 2020-10-07 18:44:42 * @LastEditors: sueRimn * @Description: 学不会 dp 的 fw * @FilePath: \main\demo.cpp */#inc

2020-10-07 20:07:23 15

原创 F - Forest Program 加反思

这次组队赛又被锤了,和队友开题过了签到,然后就没有了,这题其实我看懂了点,就有了思路,但是无奈我不会求环的周长,印象中tarjantarjantarjan求无向图的连通分量可以,也没问队友就去照着模板抄了抄,写了两个小时写崩了,因为题意也没看太懂,给队友随便口胡了一个题意,队友就开始敲那个假题意的算法了,敲完后,题目怎么也过不去,最后发现看题,看错题,敲那个代码完全没用,赛后,问另一个队友,他说他会dfs求几个环的点,带环的周长。我为什么没有和好好交流这题呢。按理说,这题如果好好交流,并且好好看题,一个小时

2020-10-04 21:23:34 36

原创 E - Two Platforms

题意不再赘述,思路可以用前缀后缀最大值来写,用一个l[i]l[i]l[i],代表前缀为iii最多取多少球,r[i]r[i]r[i]代表后缀为iii最多为取多少球,枚举l[i]+r[i+1]l[i]+r[i+1]l[i]+r[i+1]的最大值即可,这样已经避免区间覆盖。参考代码/* * @Author: vain * @Date: 2020 * @LastEditTime: 2020-10-01 15:29:52 * @LastEditors: sueRimn * @Description: 学

2020-10-01 15:34:42 20

原创 高精度模板

//清空void clear(int a[]){ for (int i = 0; i < LEN; ++i) a[i] = 0;}//读入void read(int a[]){ static char s[LEN + 1]; scanf("%s", s); clear(a); int len = strlen(s); for (int i = 0; i < len; ++i) a[len - i - 1] = s[i] - '0';}

2020-09-29 21:28:41 25

原创 HDU2176 取(m堆)石子游戏,P1247 取火柴游戏

尼禄博弈:尼禄博弈,如果nnn堆石子处于平衡态,呢么先手如果打破平衡态,呢么先手一定必输,反则不平衡状态一定必胜,因为不平衡状态可以转为平衡态,而平衡态无法转为平衡态。而平衡状态为nnn堆石子异或为000,不平衡状态nnn堆石子异或不为000,所以不平衡态要求平衡态该如何取,呢么就是求某堆取xxx个石子,后整体异或为000HDU 2176参考代码:#include<cstdio>#include<algorithm>#include<cstring>#inc

2020-09-29 21:12:58 13

原创 Pokémon Army (easy version)

题意:给一个长度为nnn的子序列,从中取出一个子序列,使a1−a2+a3−a4.....a1-a2+a3-a4.....a1−a2+a3−a4.....最大思路:可以定义一个dp[i][0],dp[i][1]dp[i][0],dp[i][1]dp[i][0],dp[i][1]数组,代表以iii结尾为奇数或偶数的最大子序列的a1−a2+a3−a4.....a1-a2+a3-a4.....a1−a2+a3−a4.....的答案,动态转移方程:dp[i][1]=max(dp[i−1][1],dp[i−1]

2020-09-29 11:05:35 53

原创 2020 ccpc 网络赛1002 Graph Theory Class(分段打表+区间筛)

思路:用区间筛素数对1−1e101-1e101−1e10区间的素数进行分段打表,每一段分5e65e65e6长度,记录每一段区间的区间和,然后就按照规律来即可。参考代码:/* * @Author: vain * @Date: 2020 * @LastEditTime: 2020-09-24 14:40:46 * @LastEditors: sueRimn * @Description: 学不会 dp 的 fw * @FilePath: \main\demo.cpp *///#includ

2020-09-24 16:59:38 111

原创 codeforces 915 E 896 C 珂朵莉树(ODT)

思路:这题必有平推操作,所以用珂朵莉写,极其方便,也不用考虑数据是否随机,根本卡不了,只需要平推后光速降复杂度即可,然后对贡献,只需暴力加减贡献即可。参考代码:/* * @Author: vain * @Date: 2020 * @LastEditTime: 2020-09-23 19:00:14 * @LastEditors: sueRimn * @Description: 学不会 dp 的 fw * @FilePath: \main\demo.cpp *///#include &l

2020-09-23 19:01:27 34

原创 洛谷 2787 珂朵莉树(ODT)

数据被加强了,(ODT)(ODT)(ODT)无法水过这个题了,但我还是要写一写这个新学习的黑科技算法。这个算法,和spfaspfaspfa一样很香,但唯一不同点是,spfaspfaspfa众所周知,而珂朵莉树(ODT)(ODT)(ODT)鲜为人知,他们过随机数据都十分快。(ODT)(ODT)(ODT)是基于stlstlstl里面的setsetset来实现的,通过一个平推操作,使复杂度快速下降,平推操作可以使setsetset容器中的数量快速下降,从而做到近似O(n)O(n)O(n)的时间复杂度,在空间上

2020-09-23 16:26:42 21

原创 2020 CCPC网络赛 Graph Theory Class(min_25 快速求1-1e10内的素数和)

题意:求1−n1-n1−n的最小生成树,边权为lcm(i,j)lcm(i,j)lcm(i,j),i,ji,ji,j属于1−n1-n1−n。思路:这个规律其实很简单推,就是让所有点和2连接,这样最小生成树的

2020-09-22 12:08:54 173

原创 P2325 [SCOI2005]王室联邦 (树上分块)

题意:给你1−n1-n1−n个城市,然后这个城市是一个树图,求能否将这n个城市划分成至少B<=s<=3BB<=s<=3BB<=s<=3B的一个省,并且这些从这些城市到省会的路径上只能存在本省的城市。思路:利用树分块,先将子树的节点划分,如果存在大于B的一块,就划分为树块,uuu为省会,可以证明最后没有被划分的数块树量最大为BBB,而被划分的树块的最大树量是2B−12B-12B−1。参考代码:/* * @Author: vain * @Date: 2020

2020-09-17 19:00:41 28

原创 Fibonacci Tree

题意:给一个NNN个点MMM条边的图,M条边分为白边和黑边,白边用111表示黑边用000表示,问是否有菲薄那切条白边的生成树存在。求最小生成树和最大生成树,其中包含白边为0−>k0->k0−>k的数量的生成树,特判无法组成生成树的图。参考代码:/* * @Author: vain * @Date: 2020-08-26 11:58:46 * @LastEditTime: 2020-09-15 15:34:18 * @LastEditors: sueRimn * @Desc

2020-09-15 15:46:03 16

原创 hdu4811-Ball(2013ACM/ICPC亚洲区南京站现场赛)

思路:分情况讨论:当min(R,Y,B)>1min(R ,Y ,B)>1min(R,Y,B)>1,一种结果,然后考虑,(R,Y,B)(R,Y,B)(R,Y,B)只有一个为111,(R,Y,B)(R,Y,B)(R,Y,B)只有两个为111,(R,Y,B)(R,Y,B)(R,Y,B)三个都为111,然后考虑,(R,Y,B)(R,Y,B)(R,Y,B)只有一个为000的情况,两个为000的情况,全都为000的情况。恶心的模拟:参考代码:/* * @Author: vain * @D

2020-09-12 20:14:57 21

原创 Gym 102152L

题意:给一个n∗mn*mn∗m矩阵数组,让求子矩阵大小为h∗wh*wh∗w的最小中位数,确保n∗mn*mn∗m为奇数。思路:二分+求二维数组的前缀和。二分答案x,然后判断二维矩阵中那个大于x的位置为1,然后二维矩阵的前缀和,二分大于x的数量,若子矩阵中有数量大于(h∗w+1)/2(h*w+1)/2(h∗w+1)/2则缩小,反则扩大。参考代码:/* * @Author: vain * @Date: 2020-08-26 11:58:46 * @LastEditTime: 2020-09-10

2020-09-10 19:11:34 31

原创 洛谷 P2783 有机化学之神偶尔会做作弊(Tarjan+無向圖縮點+LCA)

思路:先用TarjanTarjanTarjan對原圖進行一個縮點,然後建一個圖,然後處理一下樹上的點距,求一下LcaLcaLca即可參考代碼:/* * @Author: vain * @Date: 2020-08-26 11:58:46 * @LastEditTime: 2020-09-08 18:01:56 * @LastEditors: sueRimn * @Description: In User Settings Edit * @FilePath: \main\demo.cpp

2020-09-08 18:08:38 29

原创 9.5训练赛 D: Gym 102152B

思路:差分对区间进行O(n)O(n)O(n)处理标记区间,分块取出每一块的数量和边界rrr,对每一块的数量进行排序,二分出符合x询问的边界值,建立线段树对该区间进行最大值询问。注意:写线段树时,注意n=0n=0n=0 的情况参考代码:/* * @Author: vain * @Date: 2020-08-26 11:58:46 * @LastEditTime: 2020-09-06 10:33:18 * @LastEditors: sueRimn * @Description: In Us

2020-09-06 10:42:07 51

原创 2013ACM/ICPC亚洲区南京站现场赛 Wall Painting

题意:给一个长度为nnn的序列,求所有数据1...n1...n1...n任意组合异或累加的答案,不考虑顺序对于111,我们只需要求序列的和,对于222我们可以找所有两个异或的答案累加,不考虑顺序。思路:将每个数处理为2进制串,然后依次枚举二进制串上的每一位,然后利用组合数学求所有异或答案为1的可能,然后乘上kms(2,j),jkms(2,j),jkms(2,j),j代表二进制串上的位数c++不知道为什么TLETLETLE,g++可过参考代码:/* * @Author: vain * @Da

2020-09-04 23:01:36 40

原创 HDU 4821 字符串哈希+尺取+map操作

题意:给两个正整数M,LM,LM,L,分别代表取MMM个长度为LLL的字符串,然后给任意长度的字符串,问:可以得到多少个由MMM个长度为LLL的不同字符串组成的recoverablerecoverablerecoverable。思路:用字符串哈希预处理字符串,然后枚举1...L1...L1...L里的点,以其做为起点,来处理字符串哈希值,然后用mapmapmap进行统计长度为M∗LM*LM∗L的字符串是否合法的数量,进行尺取操作即可。参考代码:/* * @Author: vain * @Dat

2020-09-04 10:03:57 33

原创 关于vscode 头文件有红波浪线的问题

如果你尝试了网上很多方法都不能解决,不妨试试这种方法。如果你下载有下面这个插件,请把他禁用掉,具体原因我也不知道,但我的就是这么好的:,或者你可以尝试禁用其他的,禁用后关掉vscode,然后重新打开看看结果。...

2020-08-26 15:06:48 999

原创 HDU多校第十场补题

1003:MineSweeper1003:Mine Sweeper1003:MineSweeper随机思路:可用srand()随机化坐标暴力跑点过,但是运气特别不好就可能会TLETLETLE,但存在一个概率问题,口胡一下可行性:对于一个25∗2525*2525∗25的图,我们按照一定要求跑数字和为SSS,跑出1,2,....1,2,....1,2,....小于121212左右的数的概率比较低,因为25∗2525*2525∗25组成这些数字和的图比较少,而数字越大,组成这个图的方案就越多,跑出来的概率就

2020-08-21 11:15:10 198

原创 状压dp:方格取数(1),互不侵犯

方格取数(1):题意给你N∗NN*NN∗N矩阵,每一个位置有一个非负数吗,我们可以取任意多个数,但这些数不能相邻,问能取的最大数是多少?(0<N<21)(0<N<21)(0<N<21)思路:理解炮兵阵地后,这个题就变的十分简单了,我们可以先处理出长度为nnn的合理状态,并求出这个合理状态的累加和,然后初始化第一行dp[1][i]dp[1][i]dp[1][i]代表第一层所有状态的答案,然后就从第二层开始进行状态的枚举即可,特别判断一下stk[j]stk[j]stk[

2020-08-20 10:58:40 53

原创 poj 1185 炮兵阵地 (状压dp)

这题我几个月之前看了好久,没理解,今天又看一下午,茅塞顿开!!!题意:给nnn行mmm列的字符串矩阵,PPP表示平原,HHH表示山地,平原可以放炮兵,山地不可以放炮兵,问最多能够摆放多少炮兵。思路:首先m<11m<11m<11,所以我们可以预处理长度为mmm的(状态合法数组)stk[]stk[]stk[],又因为是合法摆放,合法状态并不是很多,数组大小开105105105即可,按照炮兵的横向攻击范围,所有炮兵向左移动一位,或者向左移动两位都攻击与原数组的炮兵产生位置重叠,用位运算表

2020-08-19 18:28:12 49

原创 HDU多校经验总结

2020-08-19memset的问题:memset的时间复杂度是O(n)O(n)O(n),但他清空的是开的整个数组大小,所以如果不是极限数据的情况,一般是用不满的,对于TTT组ororor多组输入的题目这种写法很有可能会TLETLETLE,所以推荐用forforfor循环来进行清空。时间复杂度的问题:对于题目,最重要的就是题目的数据范围和时间限制,所以要算清楚时间复杂度,再进行算法设计,一般以3e83e83e8次循环来当作1s1s1s,算清楚之后,结合时间限制再对题目进行算法设计。开空间大小的问题:

2020-08-19 10:03:05 75

原创 Leetcode 202场周赛题解

5185.5185.5185. 存在连续三个奇数的数组思路:枚举连续个数为三的即可参考代码:class Solution {public: bool threeConsecutiveOdds(vector<int>& arr) { int ans=0; for(int i=0;i<arr.size();i++) { if(arr[i]&1) ans++; el

2020-08-16 14:02:28 58

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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