butane123
码龄4年
关注
提问 私信
  • 博客:41,970
    41,970
    总访问量
  • 80
    原创
  • 1,321,496
    排名
  • 3
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:浙江省
  • 加入CSDN时间: 2020-10-22
博客简介:

CAOSHUCAOSHU的博客

查看详细资料
个人成就
  • 获得22次点赞
  • 内容获得17次评论
  • 获得52次收藏
  • 代码片获得363次分享
创作历程
  • 2篇
    2023年
  • 2篇
    2022年
  • 67篇
    2021年
  • 12篇
    2020年
成就勋章
TA的专栏
  • 笔记
    18篇
  • 开源项目
    2篇
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

174人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

go语言实现的一个基于go-zero框架的微服务影院票务系统cinema-ticket

这是一个微服务影院票务系统,基于go-zero框架实现。
原创
发布博客 2023.02.09 ·
998 阅读 ·
2 点赞 ·
0 评论 ·
3 收藏

go语言实现的一个基于go-zero框架的微服务网盘系统butane-netdisk

基于go-zero框架的cloud-disk微服务网盘系统
原创
发布博客 2023.01.29 ·
1194 阅读 ·
1 点赞 ·
0 评论 ·
4 收藏

二维线段树、二维树状数组模板

123
原创
发布博客 2022.07.25 ·
359 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

无向图的点化边操作

无向图的点化边操作:g[a].push_back({b,val[b]}),g[b].push_back({a,val[a]})这样建立两条双向边。例题
原创
发布博客 2022.01.21 ·
238 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

三分法模板

三分法模板:整数:int l = 1,r = 100;while(l < r) { int lmid = l + (r - l) / 3; int rmid = r - (r - l) / 3; lans = f(lmid),rans = f(rmid); // 求凹函数的极小值 if(lans <= rans) r = rmid - 1; else l = lmid + 1; // 求凸函数的极大值 if(lasn >
转载
发布博客 2021.11.13 ·
263 阅读 ·
1 点赞 ·
1 评论 ·
0 收藏

压九位高精模板

压九位高精模板typedef long long ll;struct Wint:vector<ll>{ const static ll BIT=1e9; Wint(ll n=0) {push_back(n);check();} Wint& operator=(const char* num) { int Len=strlen(num)-1; clear(); for(int i=Len;i>=0;i-=9)
转载
发布博客 2021.11.04 ·
155 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

线段树区间赋值+区间和查询

如题,代码如下:#include<bits/stdc++.h>using namespace std;const int maxn=1e5+50;struct node{ int l,r,sum,lazy;}tree[maxn<<2];void build(int p,int l,int r){ tree[p].l=l; tree[p].r=r; if(l==r){ tree[p].sum=1,tree[p].la
转载
发布博客 2021.11.03 ·
827 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

求n条线段形成的可能的交点数的问题

原题链接任意三点不交于一点,求n(<=700)条线段形成的可能的交点数。分析:与该题的不同之处在于是输出所有可能的交点数,直接打表会超时,而dp的时间复杂度是n^4,也会超时。由打表可知,不存在的交点数最多到31500,故打表与dp只需考虑到31500即可,之后的一定满足,直接输出即可。再结合bitset进行优化:将for(int j=0;j<=m;j++) for(int k=1;k<=n-i;k++) dp[i+k][j+k*i]|=dp[i][j];转换成for(int
原创
发布博客 2021.08.23 ·
592 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

关于维护双端序列中位数的问题

原题链接维护一个双端序列结构满足q(<=1e7)个操作,每个操作可能是:1、向右增加i(保证出现的i唯一);2、向左增加i;3、删除i元素;4、输出位置中位数(a⌈(i+1)/2⌉)。分析:类似用对顶堆维护权重中位数,我们可以用对顶双端序列维护位置中间数。构造双端序列lq、rq,使得rq的长度始终比lq的长度大1或者相等。这样中位数就始终是rq的首元素。对于删除操作,也可以用类似对顶堆的惰性操作,可以标记del[i]=1,等到了查询操作或者更新lq、rq相对长度这些需要判断i的存在性的情况且
原创
发布博客 2021.08.23 ·
161 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

求每个人可能的最好排名和最糟排名的问题

原题链接n(<=5e3)个人有n个初始分数a_i,现在给出一个新分数序列b_i,每人分配一个分数,求每个人可能的最好排名和最糟排名。分析:对a_i,b_i排序。先考虑最好排名情况:对第i个人,若此时符合排名p,则在有序的序列里后n-p(若i在这其中,则要加1)个人的总分数小于或等于a_i+b[n]的值,故对b数组去掉前p个人的分数,再与后n-p个a_i组合得到的即是符合该排名p的情况;若不符,则说明p应该更大。易知a_i越小,p一定越大,具有单调性,故可以用双指针法优化。最坏排名同理。i
原创
发布博客 2021.08.23 ·
138 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

求形成栈中的物品颜色排列在之前从未出现过的出入栈顺序对应的物品的问题

原题链接n(<=1e5)个物品,每个物品具有各自的颜色(可能相同),给出一串表示出入栈顺序的字符串,求出入栈顺序对应物品是什么,要求每次入栈形成栈中的物品颜色排列在之前从未出现过。分析:可以将问题转化成建立一棵树,使每个节点的下一层的所有子节点的颜色都不相同。入栈即是向下延伸一个节点,出栈则是回到上一个节点。根据贪心,每次插入节点,应该优先插入当前颜色出现次数最多的、在其他子节点未出现过的颜色,故用堆维护颜色出现次数,然后不断更新即可。char str[maxv];int cnt[maxv
原创
发布博客 2021.08.23 ·
101 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

关于一条线段最多能“碰”到多少个格子的问题

原题链接一张表格里,给出每个格子长度d与宽度w,求一条长度为圆周率的线段最多能“碰”到多少个格子。分析:若线段长度够长,易知最优方法是:1、要么经过min(d,w)长度且碰到2格;2、要么经过sqrt(d * d+w * w)长度且碰到3格。例外的情况就是最优方法是2,而剩下的长度十分接近只剩2次第1种情况或者只剩1次第1种情况;最优方法是1,而剩下的长度十分接近只剩2次第2种情况或者只剩1次第2种情况,故最先求出这四种答案,最终比较即可。double w,d;int main(){ i
原创
发布博客 2021.08.21 ·
188 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

未解算法题目合集

1、n-1个评委给A、B的成绩分别为数组a,b,求解a_n(<=h)、b_n(<=h)使得数组a和严格大于数组b和,且使a_n-b_n尽可能小。不知为什么答案给出的解法似乎是“非严格递减的”。原题链接ll a[maxn],b[maxn],h;int _,n,s,t;int main(){ scanf("%d",&_); while (_--){ scanf("%d%d%d%lld",&n,&s,&t,&h); n-
原创
发布博客 2021.08.19 ·
156 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

求蔓延病毒最多可以感染的城市数的问题

原题链接n(<=1e5)个城市与n-1条边与q(<=1e5)个询问,每个城市有各自温度,距城市1越远温度越低,每次询问从x城市开始,蔓延一个生存温度在[l,r]区间的病毒,问最多感染多少个城市。分析:以城市建树。对于每个询问,从城市x开始倍增向上到温度小于等于r的最高城市nowX,答案就是:nowX的子节点数目-nowX子节点中温度小于l的数目。求nowX子节点中温度小于l的数目,可以转换成求在nowX子节点中l的排名-1。所以用树套树(或主席树或划分树)维护原树即可求得[dfn[no
原创
发布博客 2021.08.18 ·
112 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

求有多少种长度为n的序列a满足加法与或运算条件的问题

原题链接问有多少种长度为n(<=1e5)的序列a,满足b[i]=a[i-1] or a[i],c[i]=a[i-1]+a[i]。分析:利用或运算与加法运算的联系:a|b=(a+b)-(a&b),得到序列d,使得d[i]=a[i-1] and a[i]。之后结合数组b与d,递推分析每个位的数字可能,即可得到答案。int b[maxv],c[maxv],d[maxv],tag[maxv][2];int main(){ int n,t,a,flag=1,temp; int
原创
发布博客 2021.08.16 ·
277 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

求所有的数字构成的不重复的数字的和的问题

原题链接现在有a[i]个i(0<i<10),求使用其中所有的数字构成的不重复的数字的和是多少。分析:由多重集的排列数为sum!/(a[1]!..a[9]!)。而“平均排列”的贡献为11…11(sum个1) * (1 * a[1]+…+9 * a[9]) /sum。故答案即为两者乘积。LL Qpow(LL a,LL b){ LL ans=1; for(;b;b>>=1){ if(b&1) ans=ans*a%mod; a=
原创
发布博客 2021.08.08 ·
176 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

关于将序列分成m(<=1e5)段中位数为b[i]的序列的问题

原题链接判断能否将长度为n(<=1e5)的序列a,分成m(<=1e5)段中位数为b[i]的序列。分析:先以b[i]为界线,将序列a分割成众多序列,选择其中长度最长的序列。若该序列的长度小于等于其他序列长度之和,那么易知可以以该序列作为中间序列,构造m段答案序列。若该序列的长度大于其他序列长度之和,则判断该序列分配给其他序列的数后剩余的数的数目,是否小于等于符合中位数小于该序列中的数的序列数目,若是则可以构造m段答案序列。struct Line{ int sum,id,now;
原创
发布博客 2021.08.08 ·
124 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

关于一个数组里的数赋值一个大数的情况分析的问题

原题链接关于数组中的数的一个情况:一个数组里的数,若赋值一个大数就会占更大的空间且消耗更多时间,若是0等小数则占更小空间且消耗更少时间。因此开一个空间很大的数组,若大部分数未赋值,则可能内存也不会超限可能不会超时。相反,若许多数赋值为较大的数字,则可能内存可能超限甚至在时间方面也可能超时。例如在下面求约数的代码里,若将在if语句里的“&&cnt[i*j]”去掉,则会超时,若将vector数组改成普通数组,则对应会内存超限。for(int i=1;i<=maxVal;i++){
原创
发布博客 2021.08.08 ·
213 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

求一些区间使得这些区间的交集是该m区间的并集的问题

原题链接给出m(<=1e3)个区间,区间可以是从l至n再到1至r(l>r),求一些区间使得这些区间的交集是该m区间的并集。分析:经分析将m个区间排序,易知答案即是:第一个区间的l与最后一个区间的r形成的区间、第二个区间的l与第一个区间的r形成的区间、第三个区间的l与第而个区间的r形成的区间。。。。。。的交集。struct Node{ int l,r; bool operator <(const Node &a){ return l<a
原创
发布博客 2021.08.08 ·
118 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

求一个点使可以任意跳跃而不会跳到陷阱里的问题

原题链接在无穷大的地图里,一只兔子以d跳跃距离可以上下左右到处跳,有n(<=1e5)个矩形的陷阱,求是否存在一个点(x,y)使得兔子从(x+0.5,y+0.5)开始跳跃,可以任意跳跃而不会跳到陷阱里。分析:取以(0,0)为左下角,(d,d)为右上角的矩形,再将其他陷阱矩形以空隔为d"平移"到该矩形内,问题就转化成能否在完成所有平移后的矩形里找到一个未被陷阱覆盖的大小为1*1的正方形,答案即是该正方形的左下角。我们可以以类似扫描线一样的写法,以0到d-1的长度建立线段树,当前高度小于d,则说明存
原创
发布博客 2021.08.08 ·
104 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多