自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Continuous Intervals(单调栈+线段树)

单调栈+线段树的好题

2022-11-15 20:22:00 139 1

原创 最长公共子串(SA和SAM求法)

后缀结构求最长公共子串

2022-09-26 21:44:31 1194

原创 树上莫队(括号序列树上莫队)

学习树上莫队及例题

2022-06-15 10:49:33 401

原创 Get The Treasury(HDU--3642) 线段树+扫描线问题

这道题唯一的一个难点应该就是如何去处理三维情况下的扫描线这里其实我们可以这样想:先以Z轴为扫描线,然后我们单独考虑在此情况下的那个平面的样子,然后我们就可以将这个问题处理成了二维的面积相交问题。但其实还是挺不好写的(主要还是我太菜了)我们可以慢慢的理一下思路首先我们可以想到这个线段树的pushdown操作其实是不需要的,因为每次查询的时候我们只需要知道根节点(整棵树)的情况即可,所以pushdown可以不用写了。然后我们可以考虑一下题中给的数据范围,x和y的范围均为[-1e6,1e6],但是我们可

2022-04-27 17:27:59 112

原创 POJ - 3045(贪心)

这道题真是给我弄yue了。本来是在一个二分比赛中看到了这道题,然后一直在想二分,想了好久也没能想出来该咋做,看了大佬的题解才知道了贪心去做更加地好首先就是要按照w+s从大到小进行一个排序先验证一下正确性设 牛一 w1 s1 牛二 w2 s2 ,假设牛一上面所有牛的体重为sum,最优状态下牛一在牛二上面,可以得到牛一的危险性a=sum-s1,牛二的危险性b=sum+w1-s2.交换两牛位置后牛一的危险性a’=sum+w2-s1,牛二的危险性b’=sum-s2.可以得到sum(a,b)&l

2021-11-18 21:29:05 154

原创 动态规划————背包问题

用了两天的时间把讲解背包问题的视频看了一遍,加深了自己对dp的理解和认识。dp问题可以从两个方面入手,状态表示 状态计算 而背包问题的状态表示一般都是两维 dp[i][j]表示从前i个物品中选且总体积不超过j的最大值,而背包问题的状态计算也是大同小异。01背包01背包是最简单的背包问题,就是每件物品最多只能取一次,这样就可以得出01背包的状态转移方程 dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+w[i]),这便是01背包最基础的解法int slove1(){

2021-10-19 14:44:23 110

原创 kmp(匹配字符串)

学习了kmp算法,其实kmp算法最重要的就是对匹配值数组ne的理解,其中ne[i],表示当前字符串以i结尾时,后最等于前缀的数量,举个例子。设字符串s=abcdabc,字符串的下标从1开始,当i=1时 字符串可以看成a,此时只有1个数,所以ne[1]=0;当i=2时,字符串可以看成ab,此时前缀和后缀无相等的地方,所以ne[2]=0;当i=3时,字符串可以看成abc,此时前缀和后缀无相等的地方,所以ne[3]=0;当i=4时,字符串可以看成abcd,此时前缀和后缀无相等的地方,所以ne[4]

2021-07-17 10:01:44 59

原创 字典树(trie)

今天学习了字典树,现在发现经过慢慢的学习,理解算法的能力逐渐的加强,现在已经比之前理解算法更快了。首先,字典树的作用就是提供一个类似前缀的东西,然后更利于之后查找某一个数字典数的应用可以分为一下几个方面:统计和排序大量的字符串【注意有比较多的公共前缀的这些字符串】,求最大异或对​ 求最大异或和​ 文本词频统计​ 前缀匹配​ 字符串检索如何建树const int N = 2e5+5;int idx,cn

2021-07-15 21:21:41 180

原创 manacher(马拉车算法)

今天学长讲了讲马拉车算法,开始听的一脸懵,然后等结束了自己拿着草纸画了画,又看了看代码,开始逐渐明白马拉车算法的奥义首先是将该字符串增加n+1个#,这样无论原字符串中元素个数是奇还是偶,最后的字符串中的元素都是奇数个 int n=strlen(a); int T=2; manacher[0]='$';//初始化边界防止越界 manacher[1]='#'; for(int i=0;i<n;i++){ manacher[T++]='#'; manacher[T++]=a

2021-07-14 21:06:10 194

原创 Codeforces Round #731 (Div. 3)(位运算)

传送门初看这道题的时候没有什么思路,看了别人的题解后,才发现时增加的位运算关系不太懂题目大意:给定你n个数(a1,a2…an),让你求出n个数(b1,b2…bn),使得序列(a1 ^ b1,a2 ^ b2…an ^ bn)符合题目要求的共同增长序列在写这道题之前很有必要复习(学习)一下位运算借鉴博客&(按位与)参加运算的两个二进制数,同时为1,才为1,否则为0。举例 3&5=1。|(按位或)参加运算的两个二进制数,一个为1就为1,否则为0。2 | 4=6^(按位异或)

2021-07-13 09:39:02 54

原创 差分及例题

今天看了acwing的一道题,用到了差分,而且本来自己就不怎么会差分,所以今天学习了一下差分公式:s[i]=a[i]-a[i-1] (i从1开始);差分复原公式: s[i]=s[i]+s[i-1];证明如下:

2021-07-12 19:26:56 486

原创 位运算与二进制

今天遇到了一道题,要将一个二进制的字符串转化为十进制的数,再转化呈二进制。首先二进制转化为十进制的方法(比较笨的方方) for(int i=31;i>=0;i--){ if(a[i]=='1'){ sum+=pow(2,31-i); } }//数据最多为2的31次方 接着为二进制转化为十进制,这里用到了位运算的方法,比如将n转化为二进制for(int i=31;i>=0;i--){ if(n>>i&1){ cout<&lt

2021-06-15 19:28:00 109

原创 课程设计之航空管理系统

这次的课程设计花了我四天才完成,但是可能还有几个不大不小的bug,在这里贴出来仅供大家参考 /*航空客运订票系统 //管理员账号123 密码123 航班管理 每条航班的信息 客户管理 客户的信息 //管理员 查询航班 订票业务 退票业务 //顾客 航班管理:增删改查航班 每条航班信息:起飞时间、乘客人数、到达时间、起点、终点 客户管理: 购票顾客的信息(哪一个航班、座位号) 查询航班:起飞时间、总人数、剩余票数、到达时间、起点、终点 订票:座位号 退票

2021-06-15 10:19:36 657

原创 Codeforces Round #723 (Div. 2) C. Potions(两道一个代码)

题目链接题目大意:给你n个瓶饮料,每个饮料有一个值,喝下去生命值会增加该值,让你从左到右依次,对待每个饮料有两种选择,喝or不喝,与此同时,要保证生命值在是、任何时期为非负数。刚开始觉得这道题要用dp,(奈何本菜鸡不会dp),又看到了其他大佬优先队列的思路,然后自己写了一下,A了。这里补充一下优先队列的知识:大佬的csdn和队列基本操作相同:top 访问队头元素empty 队列是否为空size 返回队列内元素个数push 插入元素到队尾 (并排序)emplace 原地构造一个元素并插

2021-05-31 11:09:52 120

原创 Sifid and Strange Subsequences

Codeforces Round #722 (Div. 2) B. Sifid and Strange Subsequences题目链接题目大意:给定你n个数,让你求一个最长子序列满足其中任意两个数的绝对差,均大于该子序列的最大值;思路:贪心,该子序列最多只能有一个正数,并且判断0的个数;第一种情况:0的个数小于等于1,此时允许正数存在,所以查找距离非正数最近的哪一个数,并且判断之后是否存在两个数的的绝对差小于该整数,如果存在则删除该正数。第二种情况:0的个数大于1,此时不能存在正数,所以只需求小

2021-05-26 22:54:16 313

原创 AcWing 3489. 星期几(基姆拉尔森公式)

公式描述:week= (d+2mon+3(mon+1)/5+y+y/4-y/100+y/400+1)%7,其中d表示某一天,mon表示某一个月,y表示某一年,其中若月份位一月或二月的时候,可看作上一年的十三十四月(玄学的力量)。题目链接#include<iostream>#include<string.h>#include<algorithm>#include<stdio.h>#include<cmath>#include<qu

2021-05-18 11:06:11 75

原创 Educational Codeforces Round 109 (Rated for Div. 2) B. Permutation Sort(挺有意思)

题目链接题目大意:给你n个数,你每次可以选任意一个连续的子段(不能是整个数列)将其中的数字按任意顺序排序,求将这n个数排序成为单调递增序列的最小次数。思路:用贪心就行,每次更改最长的连续子段;#include<iostream>#include<string.h>#include<algorithm>#include<stdio.h>#include<cmath>#pragma comment(linker, "/STACK:102

2021-05-17 15:13:44 79

原创 2021-05-08

Codeforces Round #720 (Div. 2) D. Same Differences传送门题目大意:给你n个数,让你找出其中符合i<j且aj-ai=j-i的对数。思路:本来想的是暴力每个点然后遍历求符合条件的最后将结果加起来,但是这样就一定会TLE,然后看了别人的题解(大佬就是大佬),再稍加思索变得出了一个比较巧妙的方法:aj-ai=j-i,经过变形可得 aj-j=ai-i,这个时候我们只需要求出 ai-i出现的次数然后-1就可以了(因为题目要求的是对数);#include&l

2021-05-08 11:32:36 227

原创 2021-04-14

HDU 5742(gcd实现分数的化简)点此处跳转题目思路大概是贪心,因为题目要求(a1+a2)/(a1+a2+..+an)的最大值,那么首先分子要尽可能的大,分母尽可能的小,也就是(a3+...+an)尽可能小。又因为题目描述的该数组为非单调递增序列,所以我们尽可能的认为a[t]当t特别大时为0;然后每当输入一个a[i]的时候让i到2之间的数小于a[i]的数全都等于a[i],这样可以尽可能的小。如果a[1]和a[2]未被赋值的时候,可以另他们都等于100,这样可以确保分子尽可能的大。另外一

2021-04-14 22:16:16 101

空空如也

空空如也

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

TA关注的人

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