自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 T40开发过程记录

记录T40开发

2022-09-01 11:50:35 1341

原创 倍增及其应用

关于倍增....

2022-03-09 09:31:20 396 1

原创 概率论复习笔记

1、贝叶斯公式(相当于全概率公式的反运算)定理:假设A1..AnA_1..A_nA1​..An​为完备事件组,假设BBB为任意事件,P(Ai)>0P(A_i)>0P(Ai​)>0,P(B)>0P(B)>0P(B)>0,P(Ak∣B)=P(AkB)P(B)P(A_k|B)=\frac{P(A_kB)}{P(B)}P(Ak​∣B)=P(B)P(Ak​B)​...

2022-01-16 14:28:43 1135

原创 重见树状数组

树状数组是一种支持高效区间查询的数据结构,基本构造如下:每个节点存在一个数组里,对应一个固定的编号,并且有固定的区间长度,节点长度与lowbit有关。以下为树状数组基础应用:单点修改+高效前缀和查询。基础建树(和单点修改是同一个函数):const int maxn=1e5+7;int tr[maxn];//树状数组int n;int lowbit(int x){ return x&(-x);}void update(int x,int d){ while(x&

2021-09-29 16:11:17 156

原创 HDU7106 Function(思维+二分)

这个题首先思路就很神奇,我还是太菜了一下也没想到。观察到g(x)的取值范围很小,可以考虑枚举g(x)的取值,然后得到一个系数确定的抛物线,运用二分可以算出最小值。但是!!我按照这个思路,对抛物线进行分情况讨论,结果wa了一上午,why??————对称轴存在误差。二分传入的参数是整型的,但是对称轴的值很可能是个小数。所以建议枚举对称轴附近的几个点,来避免精度带来的误差。ac代码如下:vector<ll>G[100];inline void init(){ for(int i

2021-08-29 22:52:29 145

原创 CSUSTOJ|你真的会数三角形吗?

呜呜呜哥哥太厉害了()先通过勾股定理(或者三角形相似)列出表达式,最终可以得到:(nnn为正方形边长)∣DF∣=n−∣CE∣+∣CE∣2n|DF|=n-|CE|+\frac{|CE|^2}{n}∣DF∣=n−∣CE∣+n∣CE∣2​并且∣DF∣,∣CE∣|DF|,|CE|∣DF∣,∣CE∣的长度都是整数。也就是找到有多少个∣CE∣<N|CE|<N∣CE∣<N,并且∣CE∣2|CE|^2∣CE∣2能被nnn整除。如果直接暴力,复杂度巨高,肯定会超时,那么考虑优化。设k∗n=y2

2021-08-24 20:28:10 101

原创 可持久化数据结构

可持久化数据结构指的是支持查询所有历史版本的一种数据结构,一般情况下只有更新信息但整体拓扑结构不变的数据结构能实现可持久化。可持久化线段树(主席树)【模板】第K小数(主席树)题意简而言之就是给定序列中的一个区间,输出这个区间第k大的数。这是一个非常经典的问题,运用了可持久化线段树结构以及树上二分的思想。可以把思路拆开来看。树上二分:查询某个区间内第k大的数,可以把有序区间分成两半来看,如果在mid之前的数比k个多,那么要求的数一定在mid之前,继续进行同样的操作直到区间只包含一个数。线段树:

2021-08-21 17:24:25 70

原创 Interstellar … Fantasy (计算几何)

第一个计算几何题,虽然是被giegie们随便秒掉的那种。基本思路这个题乍一看是三维的,但是再仔细看看发现可以把每次询问都看成一个平面问题,只要看每个点之间相对距离就行了。拍扁成平面后:情况1、如果两点的连线不经过圆,那么直接计算就可以了。情况2、如果两点的连线经过圆那么最短路径是∣CH∣+GH⌢+∣GD∣\lvert CH\rvert+\overset{\frown} {GH}+\lvert GD\rvert∣CH∣+GH⌢+∣GD∣直线CH和GD是圆的切线。怎么算呢。。。首先我

2021-08-20 10:09:01 173

原创 线段树笔记的补充(一些不太一样的线段树)

zkw线段树线段树的另外一种写法,可以不用递归,代码简短干净。zkw线段树巧妙利用了完全二叉树父子节点编号的关系,从叶节点出发,可以一路找到所有父节点。这种线段树建树与查询都从叶节点开始,所以可以直接查询叶节点信息。要把叶节点全部放在树上的同一层基础建树void build(){ while(m<=N) m<<=1; for(int i=m;i<=m+N;i++){ tr[i]=1; } for(int i=m-1;i;i-

2021-08-18 16:00:10 127 2

原创 组合数学入门笔记

组合数学属于离散数学里一个大分支,内容很多,本篇博客只记录学习最基础的组合数学模版。)因为我超菜的ಠ_ರೃ一、运用递推预处理组合数Cab=Ca−1b+Ca−1b−1C_{a}^{b}=C_{a-1}^{b}+C_{a-1}^{b-1}Cab​=Ca−1b​+Ca−1b−1​有了这个公式,发现任何一个组合数都可以由更小的组合数递推得到,如果范围不太大可以考虑预处理。代码实现:ll C[2010][2010];const int mod=1e9+7;int main(){ for(int

2021-08-10 21:56:18 146

原创 图论基础——二分图

二分图可以把图中所有顶点分到两个集合内,并且使得集合内部没有边。重要性质:一个图是二分图,当且仅当图中不含奇数环。一、染色法判二分图复杂度O(n+m)O(n+m)O(n+m)运用深度优先搜索对节点逐个染色,遇到矛盾返回false,据此判断是否为二分图。const int maxn=1e5+7;vector<int> mp[maxn];int c[maxn];//记录点的颜色bool dfs(int u,int co){ c[u]=co; for(int i

2021-08-05 09:09:19 240

原创 Codeforces Round #735 (Div. 2)部分题解

(这场至少要补到D)A枚举相邻元素的乘积即可。我的思路:贪心思维,对于任意一个区间,区间越大,最小值只可能缩小而不会增大。所以要求最大值,只需要枚举最小的合法区间。B观察到a中的元素没有任何规律,就觉得大概率这个题可能直接算不了。但是k以及a中元素都有范围,两个a中的元素取|运算,结果不会超过 2∗n2*n2∗n。所以显然 i∗ji * ji∗j 部分对整体结果影响更大(个人理解,cf上有详细证明),所以只需要枚举数组后面一截,最大值一定在里面。(我取了后1000个元素,反正过了,应该更小一点

2021-07-30 11:33:31 226 1

原创 我不想学数论ಠ_ರೃ

这篇博客接上一篇「数论入门」,记录本废物继续学习数论的笔记。一、逆元在离散数学中,逆元的定义为:定义:设 * 为S上的二元运算,e 为 * 运算的单位元,对于 x 属于 S,如果存在y属于S,使得 x * y = e则称y是x的左逆元。 如果y既是x左逆元又是x的右逆元,则称y为x的逆元。这里提到的逆元,指的是取模运算的逆元。...

2021-07-30 10:24:22 348

原创 ACwing 3780. 构造数组

3780.构造数组一个有趣的思维题~

2021-07-28 22:07:42 92

原创 线段树常用技巧模版(刷题篇)

这篇博客相当于线段树学习博客的补充。原文链接:2021-07-27 重见线段树一、双tag线段树这种时候,如果不做特殊处理,tag添加的顺序将影响最终结果,十分麻烦。由于操作含有乘法和加法,并且先乘后加与先加后乘结果不同。所以标记下传的时候要这样处理:void pushdown(int u){ //先乘后加,并下传懒标记 tr[u<<1].sum=(tr[u<<1].sum*tr[u].mu)%p; tr[u<<1].sum=(

2021-07-28 16:00:54 156 2

原创 2021-07-27 重见线段树

引入:线段树是一种神奇的数据结构,支持在线高效率(lgn)区间/单点修改/查询。下面用一个经典例题引入线段树基本模版。————————————————————————————————有一个长度为n(n<=1e5)的数组,有m(m<=1e5)次操作,操作涉及修改数组中某个元素的值以及查询数组连续区间内的和。————————————————————————————————这个题如果把数据量缩小,就是一个简单暴力题,但是数据量上来了,就需要用到线段树了。随便揪一张图片:这个图可以很好地

2021-07-27 18:37:20 139

原创 2021-7-21 又回到树形dp的恐怖世界www

树形dp就是在一棵树上跑动态规划,通常用到dfs等方法实现。这篇博客就是记录我刷的树形dp,刷题路线参考了聚聚的博客:【DP_树形DP专辑】一、常规树形dp1、求树的重心这个非常非常基础,同时在很多较复杂的题目中需要用到这个方法解决降低复杂度。...

2021-07-22 12:13:58 100 2

原创 trie树

这dp实在是d不动了,那我先学几个数据结构!Trie树可以用于快速存储和查找字符串集合。而且代码什么的非常简短qaq,以下是一个最基础的trie树结构。

2021-07-19 13:52:34 126 9

原创 记录一些有点难(指我不会写的)的dp

Gift Hunting好神奇,一开始以为是标记两个背包的状态,结果发现根本没法处理某个物品放在了哪个物品。。还没写完,稍微想一下思路大概就是先处理必须选择的物品,然后标记这个物品,在状态转移中不能把这个物品删掉。const int maxn=500;int p[maxn],h[maxn];bool s[maxn];int main(){ int v1,v2,n; while(cin>>v1>>v2>>n){ if(v1==v

2021-07-15 20:42:59 128 4

原创 2021-7-8 单调队列及其应用

不是优先队列!不是优先队列!我是fw呜呜呜!看了好久了!单调队列是既是单调,同时也符合队列先进先出的特点。(入队顺序在前的元素不能排到入队顺序在后的元素后面,而且队内元素有单调性)假设要求队列都必须是单调递增的数字,而且入队顺序是固定的:入队顺序:1 3 2 4 5队列:11 31 2(重点在这步,当要入队的数字不符合递增的条件,那么就让它持续向前走,并删除其后面的元素。)1 2 41 2 4 5最基础的例题:求m区间内的最小值const int maxn=2e6+7;int

2021-07-08 22:38:16 133 1

原创 2021-07-02 暑训开端——重见dp

一、背包问题全集1、01背包每个物品只有一个2、完全背包每个物品有无限个3、多重背包每个物品有有给定数目个4、分组背包有多组物品,每组只能选x个

2021-07-04 23:28:33 111

原创 ACM交互题

codeforces679A

2021-07-01 11:39:14 395

原创 Codeforces Round #725 (Div. 3)部分题解

C一眼过去就是二分,序列排序后对每个元素二分找出上下边界,加起来就可以了。#include <iostream>#include <iomanip>#include <stdio.h>#include <math.h>#include <algorithm>#include <queue>#include <stack>#include <set>//#include <unordere

2021-06-11 10:58:45 144 1

原创 因为一个很神奇的题目让我学了__int128和快读

华华教月月做数学原题链接这个题目读完,觉得就是写个快速幂模版题,就这?(真的就这吗?)然后写了快速幂模版,发现连样例都过不去。。哦这数据,爆long long了啊。。然后我就去看题解了。。。这个题可以用一个神奇的类型:__int128就是一个可以装128个二进制位的类型,大概范围是long long的平方。然后这个类型无法用cin/cout或者scanf/printf读入输出,那我得学学快读了qaq...

2021-06-07 11:13:16 107 1

原创 离散化 2021-6-4

为什么现在才学离散化。。。我也不知道.jpg离散化运用于数据范围较大,但是数据量并不大的情况。相当于用更小的空间记录大范围内的情况。比如这个例题:题目描述:假定有一个无限长的数轴,数轴上每个坐标上的数都是0。现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。近下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。输入格式第一行包含两个整数n和m。接下来 n 行,每行包含两个整数x和c。再接下里 m 行,每行包含两个整数l和r。

2021-06-04 19:25:15 107 1

原创 基础数据结构

一、堆堆是一颗完全二叉树小根堆:每个节点的权值都小于等于左右孩子的权值大根堆:每个节点的权值都大于等于左右孩子的权值基础操作:

2021-05-31 21:10:01 53 6

原创 Codeforces Round #723 (Div. 2)部分题解

B奇妙思维题。。观察发现,1111/11111/111111…都可以由111和11凑出来那么就只要考虑11/111。由于111%11=1那么如果给出的p=x%11 != 0,就需要p个111来填,如果x比这p个111的和小,显然输出NO,其他情况就可以输出YES了代码如下:int main(){ int t; cin>>t; while(t--){ int x; cin>>x; int mm=x%1

2021-05-29 19:47:06 354 8

原创 Educational Codeforces Round 109 (Rated for Div. 2)

日常废物。。(ABC先欠着,C写完马上补)A.Potion-making。。。。。约分的应用,听简单的,没啥事了。。int gcd(int a,int b){ if(b==0){ return a; } else{ return gcd(b,a%b); }}int main(){ int t; cin>>t; while(t--){ int k; cin>&g

2021-05-17 19:32:56 76

原创 最短路问题摘要

感谢黄色的狗,让我仔细思考串联了最短路算法。我依稀记得学习dij算法的时候,了解到了朴素版dij不能处理有负边权的图,之前因为没有理解透彻,也没有细思这个问题,今天仔细想了一下原因。上个图吧:如果用朴素的dij算法(n^2),每个点被确定后就不能再被更新了,然而负边权的存在会导致一个可能在被确定后最短路径继续被更新,所以这个肯定会出错。但是对于堆优化的dij算法,退出循环的条件是队列非空,然而每次只要起点到该点距离被更新了就会入队,不会直接确定某个点的dis,测试了一些数据发现并不会出问题!(但是

2021-05-13 16:29:34 106

原创 数论入门 2021-2-28

一、素数筛欧拉筛

2021-05-13 11:57:53 136

原创 银川选拔赛补题

我菜得很抱歉。。AB、pc玩游戏wuwuwu这个题是个挺好想的二分。可以看出,随着查询次数的变多,抽屉合法能放下的娃娃越来越少。所以考虑二分答案,查询最早在什么位置能发现npy作弊了,check在已知某些点不能放娃娃的情况下最多能放的娃娃数量N,与娃娃总数k比较。(要注意放娃娃不能相邻)代码实现如下:(我本来用set做的结果tle了(2000ms左右),用数组排序直接过了而且只跑了300ms左右)#include <iostream>#include <stdio.h&g

2021-04-28 15:58:40 298 5

原创 c++语法学习 2021-4-25

实在是跪了太多次了。。虽然说ACMer最重要的素养不在于语法,但是语法做不到精通,实在是愧为计算机专业的学生,所以决定重新研究c++语法,这篇博客用来记录我的学习历程。一、c++区别于c的一些概念1、引用:基本语法:int a=10;int &t=a;//此时t相当于a的一个别名,t变a变,a变t变注意⚠️:定义引用时必须初始化成引用某个变量;初始化后,就一直引用改变量,之后不会改变;简单示例://交换两个变量的值void myswap(int &a,int &a

2021-04-27 10:29:30 79

原创 set中元素删除相关问题

set元素如果用迭代器遍历,一边遍历一边删除,会大大滴出问题。。遇到很多次了,于是查了一下资料,得到以下结论::(´・Д・)」//set删除元素的函数 s.erase(<#const_iterator __p#>);//用迭代器删除元素 s.erase(<#const key_type &__k#>);//用key删除元素一些测试::⬆️这个没问题然鹅⬆️这个有问题⬆️这个也有问题why???原因是,当删除set中某个元素时,当前元素迭代器会失

2021-04-21 09:45:59 935

原创 对决-二维偏序

csust3648对决这类问题就是求一段序列中的逆序数::逆序数就是对于一个序列:1 3 4 2假设正序:1 2 3 4那么原序列的逆序数为2仔细观察,发现这个就是算冒泡排序交换相邻元素的次数。但是这个算法复杂度为O(n^2)吗,一看数据范围,要tle的。求逆序数的方法有::线段树||树状数组||归并具体分析一下,这个题要求的是这按照x降序排序后序列y的逆序数。线段树写法:...

2021-04-08 19:31:39 130

原创 ACMerの不务正业系列:HTML入门

嗯。。?html?Hyper Text Markup Language超文本标记语言,通过代码表示出好看的图片、文字等等。一、浏览器我们编写html文件,需要用到浏览器打开渲染qwq,这是一些常用的浏览器:二、web标准因为浏览器不同,可能导致相同的文件显示不同的内容,于是为了方便起见,W3C组织制定了一系列标准。web标准的分为三个方面:一张图解释一下web标准(狗头)三、html基本构造(等我更新鸭)...

2021-03-30 19:32:07 79

原创 图论入门-拓扑排序

为啥到现在才学拓扑排序捏。。(我也不知道)ಠ_ರೃ拓扑排序就是对于一个有向无环图,让其中所有的顶点某个按照线性顺序排列。要求:图中任意一对顶点u和v,如果u有边指向v,则u在v之前。上个板子题::直接在代码中解析具体步骤神经网络...

2021-03-29 18:18:51 105

原创 HDU5952 Counting Cliques

啊这个题真的是暴搜日常手速场的晚训,突然来了个图论,一下子想不出怎么做qwq。那么这个题怎么搜呢?如果完全没有一点顺序,直接按照每个节点dfs,这个不仅会超时,还会产生重复的团,感觉判断起来挺复杂的。所以建立邻接表的时候,只允许小节点连大节点,也就是说只能从小往大搜。ac代码:#include <iostream>#include <stdio.h>#include <math.h>#include <algorithm>#include

2021-03-25 22:01:54 69

原创 acm竞赛中tle的原因 2021-3-9

被t傻了之后,总结了几个tle的原因以及解决方案一、算法复杂度过高。这个是根本上的问题了,只能考虑优化算法。二、如果确认算法选择无误,那么还有以下坑点:1、cin/cout超时这个可以考虑关闭同步流,即在main函数中加上这行代码://关闭同步流ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);或者改成scanf/printf几个实验结果关闭同步流:未关闭同步流:虽然每次运行时间都有差别,但是可以看出关闭同步流

2021-03-09 10:54:27 2613

原创 图论刷题记录

记录刷到的然后不咋会的/值得记录的图论题poj2253frogger这个题我觉得挺奇妙的)),大概是我遇到的第一个图论变形题。基本题意:有一堆点(编号从1到n),起点和终点分别在1,2上。每个点之间都联通,给出了点的坐标(易得每个点之间的距离)。问怎么走,才能让走过每两个点的距离最小。就是对于任意通路,如何使的每单条路的最大长度最小,这个最小长度就是ans。举个栗子如图,起点为1,终点为2那么对于这个图,ans=2。从起点到终点可以选择从1->2或者1->3->2,第

2021-03-08 12:43:10 76 1

原创 线段树入门 2021-3-1

呃我也开始学线段树了。。。嘤嘤嘤我还是不咋会

2021-03-01 21:47:37 76

空空如也

空空如也

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

TA关注的人

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