自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (2)
  • 收藏
  • 关注

原创 Hash(哈希)选做

Hash(哈希)选做

2022-10-28 16:18:49 523 1

原创 关于《C++中的随机数生成器指南》

Don't use rand(): a guide to random number generators in C++

2022-10-21 19:38:41 410

翻译 不要使用rand():C++中的随机数生成器指南

Don't use rand(): a guide to random number generators in C++不要使用rand():C++中的随机数生成器指南

2022-10-21 16:25:16 1671

原创 基础数据结构选做

基础数据结构选做

2022-10-12 20:25:53 405

原创 CF1490F Equalize the Array

CF1490F Equalize the Array 洛谷:普及/提高− Codeforces:1500

2022-08-03 15:32:50 147

原创 CF1574B Combinatorics Homework

CF1574B Combinatorics Homework 洛谷:暂无评定 Codeforces:1100

2022-08-02 16:50:35 175

原创 CF1556B Take Your Places!

CF1556B Take Your Places! 洛谷:普及− Codeforces:1300

2022-08-01 11:07:57 147

原创 CF1560B Who‘s Opposite?

CF1560B Who's Opposite?洛谷:普及-Codeforces:800

2022-07-31 11:12:28 142

原创 CF784D Touchy-Feely Palindromes

这在 CF 上是 April Fools Contest 题目,所以我怀疑 1900 的题目难度也是 fool (

2022-07-30 16:29:33 168

原创 Codeforces补题

突然发现CF上一部分题没做出来之后扔了,于是开坑补题……

2022-07-30 11:29:28 562

原创 封装矩阵结构体

struct matrix{ int n,m; int a[MAXN][MAXN]; matrix(int x,int y) { n=x; m=y; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) a[i][j]=0; } int *operator[](int i) { return a[i]; } void init() { for(int i=1;i<=n;i++) a[i][i]=

2022-03-06 11:34:55 329 1

原创 平衡树详解(fhq Treap)

你并不需要先学习Treap!

2022-01-25 10:45:17 1219

原创 关于CSP2021

今年(2021年),CCF发布了 NOI Linux 2.0 以及 关于NOI系列活动中编程语言使用限制的补充说明 ,将NOI系列比赛的标准进行了改动。

2021-10-21 11:42:10 1750 5

原创 常见时间复杂度

一、基础算法快速排序 O(nlog⁡n)O(n\log n)O(nlogn)归并排序 O(nlog⁡n)O(n\log n)O(nlogn)桶排序 O(n)O(n)O(n)二分 O(log⁡n)O(\log n)O(logn)(一般情况下)倍增 O(log⁡n)O(\log n)O(logn)DFS\text{DFS}DFS算法 一般为指数级二、字符串算法KMP\text{KMP}KMP O(m+n)O(m+n)O(m+n)Trie\text{Trie}Trie树 插入O(lens),查询

2021-10-18 18:38:41 127

原创 模拟退火详解

写在前面你有没有写不出正解而被迫写rand的经历?你有没有提交rand数十次却每次都在二三十分上下浮动?你有没有在提交一份rand代码之前净身更衣焚香?如果是,那么,这款模拟退火正适合你!本店开业活动为期一周,模拟退火买一送一,货到付款,逾期不候!(((模拟退火模拟退火究竟是什么呢?退火是一种金属热处理工艺,指的是将金属缓慢加热到一定温度,保持足够时间,然后以适宜速度冷却。目的是降低硬度,改善切削加工性;降低残余应力,稳定尺寸,减少变形与裂纹倾向;细化晶粒,调整组织,消除组织缺陷。准确的说

2021-10-14 09:31:27 1423 2

原创 一些奇怪的图

普通树:普通二叉树:完全二叉树:满二叉树:链:森林:环:菊花图:(逐渐诡异)无向基环树:基环外向树:基环内向树:仙人掌:沙漠:

2021-10-13 17:09:37 661

原创 Tarjan强连通分量算法

“Tarjan 陪伴强连通分量生成树完成后思路才闪光欧拉跑过的七桥古塘让你 心驰神往“”——《膜你抄》

2021-10-12 21:31:35 657 3

原创 动态开点线段树

前置芝士线段树引入在普通的线段树中,我们一般要开 4N4N4N 的数组以避免越界。然而,在一些题目中,空间限制并不允许我们这样做。这个时候,就需要使用动态开点线段树。动态开点线段树我们来观察一下普通线段树的左儿子和右儿子的表示方法:左儿子:p<<1右儿子:p<<1|1这样,虽然我们可以直接算出左右儿子,比较方便,但是,这样也浪费了大量的空间。在学习二叉树的时候,二叉树还有哪种存储方法呢?链式储存法,即对一个节点建立左右儿子指针,指向它的左右儿子。这样,建立新节点时

2021-10-09 16:51:07 3385 3

原创 LCA详解

引入来看例题:洛谷 P3379 【模板】最近公共祖先(LCA)给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。

2021-10-07 21:41:26 416

原创 扩展欧几里得算法(exgcd)

前置知识数论基本概念裴蜀定理在学习exgcd之前,我们需要先学习一下裴蜀定理。裴蜀定理有两条:对于任意的整数 a,ba,ba,b,存在一组整数 x,yx,yx,y,使得 ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b)若 a,ba,ba,b 是整数,那么对于任意的整数 x,yx,yx,y,都有 gcd(a,b)∣ax+bygcd(a,b)|ax+bygcd(a,b)∣ax+by第一条比第二条难证,我们先来证明第一条,下面是证明过程,我尽量讲的通俗易懂:

2021-10-04 19:33:22 1202

原创 对拍技巧详解

前置知识随机数引入假设你现在正站在某大型比赛的赛场上,面对着屏幕前的世纪难题大汗淋漓,对正解毫无思路,这时你应该怎么办呢?在这样的情况下,你应该写出一个暴力代码,尝试骗得一部分分数。然而,不甘于平凡的你怎能只获得可怜的20pts20pts20pts呢?你要拿100pts100pts100pts,你要AK,你要勇敢的对€€£说:“拿来吧你”你绞尽脑汁,想到了一个“疑似正解”,这时你要怎么确定它是否是正解呢?为了你的宏图伟业,你就要学习这样一种东西:对拍对拍对拍是干什么用的呢?你写了一

2021-09-17 21:44:10 1579

原创 洛谷 CF1556A 【A Variety of Operations】

题意你有两个数 aaa 和 bbb,初始值均为 000,你可以任选一个整数 kkk,进行以下三种操作中的一种:将 aaa 和 bbb 都加 kkk;将 aaa 加 kkk,将 bbb 减 kkk;将 bbb 加 kkk,将 aaa 减 kkk;对于给定的 ccc 和 ddd,求最少的操作数使得 a=c,b=da=c,b=da=c,b=d,若无法得到,则输出 −1-1−1。分析我们先假设能够使得 a=c,b=da=c,b=da=c,b=d,如果最后一步是操作2或操作3,那么倒数第二步完成后

2021-09-08 09:15:44 160

原创 洛谷 CF1260A 【Heating】

题意我们可以将原题转化为这样一个较为形象的问题:你可以任选 cic_ici​ 个数,使得它们的和为 sumisum_isumi​,求一种方案使得所选的数的平方和最小。分析我们用一些简单的初中数学知识进行推导:设两个数a,b∈(0,+∞)a,b\in(0,+∞)a,b∈(0,+∞)∵(a+b)2=a2+b2+2ab,a>0,b>0∵(a+b)^2=a^2+b^2+2ab,a>0,b>0∵(a+b)2=a2+b2+2ab,a>0,b>0∴a2+b2<(a+

2021-09-08 09:15:02 112

原创 洛谷 CF1551B1 【Wonderful Coloring - 1】

题意将一个字符串的每个字符染色,满足以下条件:每个点或被染成红色,或被染成红色,亦或不被染色同色的任两个字母不相同染成红色的字母数量等于染成绿色的字母数量分析我们来看一下第二条和第三条。这表示了什么?表示对于每种字母,最多填一个红色,一个绿色。也就是说,当这个字母的数量不少于 222 时,它对答案的贡献为 111。如下:最多填一个红色和一个绿色:而对于只有一个的字母,每一个字母填红色,就要有一个字母填绿色。也就是说,设所有个数为 111 的字母的数量为 tottot

2021-09-08 09:14:18 148

原创 洛谷 P7754 【[COCI2012-2013#3] SAHOVNICA

题意概括画出 r×cr \times cr×c 的X、.相间的棋盘,棋盘的每个格子由大小为 a×ba \times ba×b 的,只有X和.中的一种字符的字符矩阵构成。算法分析这个题其实也不是很好想,容易糊涂。我们可以发现,对于每一行,有下列两种情况:连续 bbb 个X,然后连续 bbb 个.,然后再连续 bbb 个X,然后……连续 bbb 个.,然后连续 bbb 个X,然后再连续 bbb 个.,然后……也就是说,我们可以 if 两种情况:先X后. 以及 先.后X。那又应该怎样讨

2021-09-08 09:10:43 202

原创 洛谷 CF1531A 【Зингер | color】

题意你有一个物品,初始时它的颜色是 blue 且状态为未上锁。接下来依次有 nnn 次操作,每次操作由一个字符串给出。若这个字符串是 lock:将它的状态改成上锁。若这个字符串是 unlock:将它的状态改成未上锁。若这个字符串不是 lock 或 unlock:若它的状态为未上锁,则将它的颜色改成这个字符串。你需要输出物品最终的颜色。0≤n≤1000 \leq n \leq 1000≤n≤100。分析我们只需一个bool类型的变量来表示当前是否上锁,初始化为 000 表示未上锁用一个字符串来记

2021-09-08 09:10:01 119

原创 洛谷 CF1466B 【Last minute enhancements】

我们可以对xix_ixi​做加111的操作,我们思考一下操作和不操作的效果:若xi=xi−1x_i=x_{i-1}xi​=xi−1​,则对xix_ixi​加111可以使它们不相等,使得答案增加,而不操作则不会影响答案,因此操作优于不操作;若xi≠xi−1x_i\ne x_{i-1}xi​​=xi−1​,则加111可能会减小或不影响答案,而不操作一定不影响答案,因此不操作优于操作;所以我们得出了这样的算法:若xi=xi−1x_i=x_{i-1}xi​=xi−1​,xix_ixi​加1

2021-09-08 09:08:43 121

原创 洛谷 P7540 【[COCI2009-2010#1] DOMINO】

题目传送门这篇题解主要面向初学者。大佬再见求和符号∑\sum∑∑i=0n\sum_{i=0}^n∑i=0n​表示所有0≤i≤n(i∈N)0≤i≤n(i\in N)0≤i≤n(i∈N)的iii的和。例如:∑i=15\sum_{i=1}^5∑i=15​意为1+2+3+4+51+2+3+4+51+2+3+4+5。求所有满足 $0 \le x\le y $ 的非负整数对 (x,y)(x,y)(x,y) 中,∑x+∑y\sum{x} + \sum{y}∑x+∑y 是多少意为所有满足 $0 \le x\

2021-09-08 09:07:49 234

原创 洛谷 P7227 【[COCI2015-2016#3] ESEJ】

按照惯例这里需要一个传送门挨个分析题意:这篇文章至少 aaa 个词,最多 bbb 个词。——限定了范围,直接造bbb个比较方便。每个单词至少 111 个字母,最多 151515 个字母。——显然一个正常的人都不会用151515个字母的。文章至少包含 b2\dfrac{b}{2}2b​ 个不同的单词。——还是全部都不同来的容易。分(hu)析(che)完毕。众所周知,从111到bbb的自然数是绝对不会有重复的。那为什么不用数来代替字母呢?将 000 到 999 的数与 aa

2021-09-08 09:02:05 271

原创 洛谷 P7258 【[COCI2009-2010#3] SLATKISI】

题目传送门题目里对输入的描述似乎不太精确:Mirko最小的钞票上的零数Mirko 最小的钞票上的零数Mirko最小的钞票上的零数指的是101010的指数(即10310^3103,10410^4104,10510^5105上面的333,444,555)。题意分析通过对题意的分析,我们可以将题意简化成:将数字ccc四舍五入精确到kkk位顿时高大上的橙题就变成了小学数学题(这可能就是此题没有算法标签的原因之一)考虑问题众所周知C++C++C++的整型除法自带向下取整,所以不需要写复杂的四舍五入函

2021-09-08 08:59:06 171

原创 洛谷 P7259 【[COCI2009-2010#3] SORT】

题目传送门思考看到题目第一感觉是桶排,然而看到1≤C≤1091≤C≤10^91≤C≤109嗯······就很NICE1≤N≤1031≤N≤10^31≤N≤103然后就想到了map(不知道的可以看这里)尝试使用mapmapmap进行排序然而无果对于这道题来说,mapmapmap能做而普通数组不能做的就是存下数字的次数和出现位置。而如果将其中一个存到mapmapmap里,另一个存到普通数组里,然后将两者挂钩,就能通过对数组的排序来实现整体的排序。代码(具体做法见注释)#include&

2021-09-07 16:30:25 192

原创 洛谷 P6867 【[COCI2019-2020#5] Politicari】

直接模拟模拟代码#include<iostream>#include<cstdio>#define ll unsigned long long//不开long long 见祖宗using namespace std;ll k;int n,a[510][510];int u,v,t;int main(){ cin>>n>>k; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) c

2021-09-07 16:28:09 302

原创 洛谷 P7174 【[COCI2014-2015#4]CESTA】

思路根据小学数学教科书我们知道303030的倍数必定是101010的倍数,也是333的倍数;101010的倍数最后一位必定是000,333的倍数各位之和也是333的倍数。然后再来看数据范围:对于 100100100% 的数据,nnn 的位数不超过 10510^5105 。显然这题要用字符串了。那么怎样使结果最大呢?排序。排序之后各位之和不变,所以依然是333的倍数,而排序之后000一定在最后,所以依然是101010的倍数。所以排序之后的数也是303030的倍数。代码#include

2021-09-07 16:24:46 260

原创 洛谷 P7199 【[COCI2019-2020#1] Trol】

一、直接模拟看到题第一想法就是直接模拟,毕竟只是一道红题。模拟代码:#include<iostream>#include<cstdio>#define ll unsigned long longusing namespace std;int q;ll l,r;ll ans;ll f(ll n){ int r; int a=0; while(n/10!=0) { a=0; while(n!=0) { r=n%10; a+=r;

2021-09-07 16:23:03 336

原创 平面向量快速入门

概念什么是向量?这就是向量。从图上可以看出,向量是一条带箭头的线,准确来说,向量是一条有向线段。那么向量有什么样的意义呢?在数学中,它可以简化运算,将复杂的几何问题转化为简单的向量运算。那它又有怎样的实际意义呢?它可以表示物理中的矢量,可以表示位移、速度、力等物理量,同时可以以向量运算代替物理量运算,达到简化的目的。性质向量既然是一条有向线段,决定向量的因素有哪些呢?向量的方向向量的长度注意,没有向量的位置!也就是说,向量与它的位置无关!图中,红色的向量与蓝色的向量完全相等

2021-09-06 15:42:06 688 1

原创 平衡树详解(Splay)

引入先看例题:(洛谷 P3369 【模板】普通平衡树)您需要写一种数据结构,来维护一些数,其中需要提供以下操作:1.插入 xxx 数2.删除 xxx 数(若有多个相同的数,因只删除一个)3.查询 xxx 数的排名(排名定义为比当前数小的数的个数 +1+1+1 )4.查询排名为 xxx 的数5.求 xxx 的前驱(前驱定义为小于 xxx,且最大的数)6.求 xxx 的后继(后继定义为大于 xxx,且最小的数)显然可以使用BST(二叉搜索树)完成,它的时间复杂度是 O(logn)O(log

2021-08-29 21:30:00 10745 10

原创 线段树详解

引入例题:(P3372 【模板】线段树 1)已知一个数列,你需要进行下面两种操作:1.将某区间每一个数加上 kkk。2.求出某区间每一个数的和。我们可以使用树状数组来解决这道题,然而这次我们要回归正解了!我们要使用线段树!线段树线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界

2021-08-28 19:11:36 912

原创 单源最短路径算法

Dijkstra可以用优先队列优化到O(mlogn)O(mlogn)O(mlogn)的时间复杂度。注意!Dijkstra算法只能处理正边权!负边权要用SPFA!代码(优先队列优化):#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;struct st{ int to; int dis; int nxt;}edg

2021-08-14 21:07:47 90 1

原创 初赛——备忘录

前言2021CSP-S初赛备考备忘录,放一些重要知识点,随学习进度持续更新。数制转换

2021-08-13 20:50:51 230 1

原创 最小生成树(Prim和Kruskal)

引入例题:(洛谷 P3366 【模板】最小生成树)给出一个无向图,求出最小生成树,如果该图不连通,则输出 orz。Prim这个东西我不写了。。。我只说说我最近研究 抄袭 的最新成果:Prim可以使用优先队列优化,能够达到O(nlogm)O(nlogm)O(nlogm)的优秀复杂度(和Dijkstra一样)。代码(链式前向星+优先队列优化):#include<iostream>#include<cstdio>#include<cstring>#incl

2021-08-13 18:37:07 123 1

基本字符串全家桶(Hash,KMP,Trie,AC自动机)

基本字符串全家桶(Hash,KMP,Trie,AC自动机)

2021-08-11

最短路全家桶(Floyd,Dijkstra,SPFA)

最短路全家桶(Floyd,Dijkstra,SPFA)量大管饱

2021-06-02

空空如也

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

TA关注的人

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