- 博客(38)
- 收藏
- 关注
原创 redis——缓存雪崩,缓存击穿,缓存穿透
缓存雪崩是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。
2024-10-14 16:58:07 1191
原创 Mysql-事务
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一回滚事务:特性(ACID): 事务是不可分割的最小操作单元,要么全部成功,要么全部失败。 事务完成时,必须使所有的数据都保持一致状态。 数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环。 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。 不可重复读,幻读 幻读 无设置:
2024-10-11 16:09:04 149
原创 Mysql-锁
行锁与表锁冲突,添加表锁时会检查当前表是否有对应的行锁,如果没有,则添加表锁,此时就会从第一行数据,检查到最后一行数据,效率较低。加了表共享读锁后,所有客户端只能对表进行读(DQL)操作,会阻塞其他客户端的写操作(DDL/DML)。排他锁(X):允许获取排他锁的事务更新数据,阻止其他事务获得相同数据集的共享锁和排他锁。行锁和间隙锁组合,同时锁住数据,并锁住数据前面的间隙Gap。注:共享锁和共享锁兼容,和互斥锁互不兼容,互斥锁和互斥锁不兼容。冲突,保证读写的正确性,不可以对元数据(表结构)进行写入操作。
2024-10-10 18:21:45 1194
原创 Mysql-sql优化
尽量降低主键的长度,插入时尽量使用自增主键,尽量避免对主键的修改。引擎并不会把全部字段取出来,而是专门做了优化,不取值,服务层直接。通过表的索引或全表扫描,读取满足条件的数据行,然后在排序缓冲区。中完成排序操作,所有不是通过索引直接返回排序结果的排序都叫。服务层对于返回的每一行,放一个数字。根据排序时使用的字段建立联合索引(遵循最左前缀法则)引擎会遍历整张表把每一行的字段值都取出来,返。fieldsterminated:设置分隔符。引擎会遍历整张表,把每一行的 主键。来,返回给服务层,服务层判断是否为。
2024-10-10 11:05:42 467
原创 Linux虚拟机数据库远程连接
找到虚拟机中的mysqld.cnf("\etc\mysql\mysql.conf.d\mysqld.cnf")文件找到这一行将其注释。
2024-10-08 15:57:35 201
原创 Golang基础语法
const (// 可以在const{}添加关键字iota,每行的iota会累加一,默认iota从零开始a , aa// 1b , bb// 2c , ccd , dd输出的结果// main 函数// 声明slice是一个切片,并且初始化// 声明slice是一个切片但是没有分配空间slice2 = make([]int, 3) // 开辟三个空间// 声明slice是一个切片并且分配空间// 常用定义方法// main 函数// 声明a是map类型。
2024-10-02 16:04:59 458 1
原创 cmp的运用
在做题时我们经常会碰到排序问题,有的题目要求从大到小排序,但是如果有大小相同的序号小的排在前面,当我们想用sort函数直接排序时,我们如果用。例如有的题目给你一个数组,要求你统计其中每个数出现次数,数组中的数从按大到小的顺序输出答案,我们如果直接用map来存储。我们会发现有相同的值时,序号大的会排在前面。此时如果我们直接输出的话与答案要求的不符,这时我们就可以用cmp。不仅如此,诸如map,set等都可以用cmp。map会自动的将数按从小到大的顺序排列。set的cmp的使用同理。这时就可以满足题目条件了。
2023-08-05 13:28:45 283
原创 Educational Codeforces Round 152 (Rated for Div. 2)
写一个循环如果面包数大于0,则面包数减一,层数加一(减一后为零则结束循环),然后再从奶酪火腿中找一个数量不为零的减一,层数加一(如果都为零结束循环)。有n个怪物,血量为ai,我们每次可以对当前血量最高的怪物造成k点伤害(如果血量相同攻击序号靠前的怪物),当怪物血量为小于等于0时怪物死亡。要做一个三明治,三明治由面包+(火腿/奶酪)+面包+(火腿/奶酪).......+(火腿/奶酪)+面包,组成。求三明治最大的层数。先对数组中每个怪物的血量模k,这时我们只需要将怪物的按血量从大到小排序输出对应的序号即可。
2023-07-28 14:39:14 284
原创 AtCoder Beginner Contest 245
给你两个序列A,B,判断序列X对于每个i,Xi=Ai or Bi,是否都能满足|Xi-Xi+1|<=k。那么判断当前数字是否可用只需要判断当前数字与a[i-1],b[i-1]中可用的数字之差绝对值小于等于k。注意在最开始时要注意要使dp[1][1],dp[0][1]初始化为1,因为第一个数字肯定是可以选的。如果当前数字可用如果为a[i]那么标记dp[1][i]=1,反之标记dp[0][i]=1。用dp[0][i]=1来表示b[i]可用。首先我们用dp[1][i]=1来表示a[i]可用。
2023-07-16 14:21:53 176
原创 AtCoder Beginner Contest 246
矩形的坐标有这样一个性质,每个数字都会出现两次,因为我们已经知道了3个坐标,那么我们只要统计这三个坐标出现的数字然后对x坐标只出现了一次的就是答案,对于y同理。在遍历完数组后,如果优惠券还没用完,那就再对数组a排序,从最大的开始,把ai变为0,知道ai遍历完或者k<=0时结束。对数组a进行排序,从最大的开始减,只要ai大于x就用优惠劵,知道ai<x或者k<=0为止。给你一个坐标(A,B),从(0,0)向(A,B) 方向移动距离一,求移动后位置的坐标。给你一个矩形的三个坐标,求出第四个坐标。
2023-07-16 11:18:57 182
原创 AtCoder Beginner Contest 310
将产品与其他每个产品的价格比较如果价格大于其他产品中的一个,就再比较功能,如果价格少的产品功能又更多或者相同,即符合条件。是否存在价格更低功能却一样或者更多的产品(功能更多指具有其所有功能的基础上还具有更多功能),或者价格一样功能更多的产品。每次f[i]=f[j],就i++,如果最后i的值大于c[i]说明符合条件(功能一样或者更多),令flag=1。因为功能应的数字是递增的,所以判断产品功能时我们可以设置一个flag,令i=1,j=1,j<c[j],j++如果有输出Yes,否则输出No。
2023-07-15 23:17:21 378
原创 AtCoder Beginner Contest 248
如果a<b,那么a=a*k,其分裂次数加1直到a的个数大于等于b,此时的分裂次数即为答案。每遍历每个字符,出现过的字符在数组中标为1,遍历完后未被标为1的字符即为答案。有a个史莱姆,每次史莱姆可以分裂成a*k个,求要多少次才能使数量大于等于b个。输入一个字符串,长度为9,范围为0到9之间的数。输出字符串中未出现的数。有多少个长度为n的序列满足以下条件。(答案取模998244353)本题可用动态规划,令dp[序列长度][序列之和]=满足条件的个数。首先令dp[0][0]=1。
2023-07-15 17:20:01 64
原创 AtCoder Beginner Contest 247
有n个人每个人都有一个姓氏一个名字,要给每个人以姓氏或者名字作为昵称,昵称要满足除自己外,不能和其他任何一个人的姓氏或者名字相同,判断是否可行。),对每个人遍历除自己外的所有人的姓氏和姓名,如果自己的姓氏和姓名都有别人和自己相同,那就不可行,否则可行。输入一个n,如果是1,输出1,如果是2输出1 2 1,如果是3输出1 2 1 3 1 2 1,依次类推。第一种,初始设置字符串为s=1,先将2到16存入字符串数组c, 输入n,即循环n次,每次。s=s+c[i]+s;
2023-07-15 15:56:37 95
原创 牛客小白月赛76
但是当x=1,不一定是x=1(坑),因为计算时我们会对结果取模,所以x=1时x也可能是998244353+1。我们有一个数x=0,有一个序列ai,我们可以使x=x*ai,或者使x=x+ai。两个人玩剪刀石头布,一个人会在开始时说出自己将要出什么(其实在撒谎),求你要出什么才能赢(他认为你会出能赢他说的那一个)。当n大于2*m时,a直接取m,b取n-m即可得到答案(因为n>2*m所以m%(n-m)=m)。你有一个1,每次可以复制你拥有的所有1或部分1,求最少操作多少次能使你的1的个数为n。
2023-07-15 12:40:47 58
原创 AtCoder Beginner Contest 249
我们用map存储各个字母出现的次数,且在输入时判断有无大小写字母,如果有大小写字母,且个各字母出现次数为1,即为优美字符串。从第零秒开始计时,时间对(a+c)取模如果小于a,那第一个人跑的距离加上b,重复以上操作直到x秒。给你n个字符串,在其中选若干个字符串使其字母出现的次数为k的个数。包含大小写字母,没有重复字母(A,a不算同一个字母)。另一个人每以d米每秒慢跑e分钟后休息f分钟。一个人每以b米每秒慢跑a分钟后休息c分钟。给你一个字符串,求其是否是优美字符串。求出两个人走的距离后比较大小即可。
2023-07-15 12:15:39 72 1
原创 牛客小白月赛73
我们可以通过交换数据位置使序列变为单调递增的,这时我们发现,只要没有相同的数字,序列就为优美序列。可以写一个cheak函数用来判断后导零的个数,然后用二分求出后导零个数为k在前缀积序列中的左右端点即可。我们可以先通过前缀积预处理序列,因后导零只会越乘越多,所以前缀积数列中的后导零个数是递增的。首先n本身肯定满足条件,2*n也满足,所以对于所有的n,我们都可以有x=n,y=2*n。给出一个整数n,n为x,y的最大公约数,求符合条件的x,y值。给定一个长度为n的序列,判断其通过交换数据位置来使其为优美序列。
2023-07-14 17:15:51 63 1
原创 AtCoder Beginner Contest 250
当进行交换操作时,我们先用a记下x数的位置,以及用b记下x数后面一位数的值。进行q次操作,输入一个数x,将x和x后面的数交换位置(注意,如果x后面没有数字则与前面的数交换位置)。交换完之后我们要将id内的值更新为交换后的值,id[b]=a,id[x]=id[x]+1/id[x]=id[x]-1(后面没数的情况)。在一个地方贴n*n块瓷砖,瓷砖有黑白两种大小为a*b,第一块瓷砖为白色,按黑白相间的方式贴。两个网格(a,b),(c,d)相邻的条件:|a-c|+|b-d|=1。
2023-07-14 14:57:59 88 1
原创 AtCoder Beginner Contest 251
用两个map来分别存储字符串对应的分数和字符串对应的位置。在记录完后,找出最大分数对应的字符串,再通过字符串找到它对应的位置即为答案。输入n个字符串和n个分数,求出最大的分数对应的字符串的位置(如果同一个字符串多次出现只计算第一次出现的字符串的分数)有n个重量,在其中选一到三个不同的数相加得到的不同的且大于w数被称为好数,求有多少的好数。给你一个字符串(长度再1到3之间),循环输出直到长度为6。首先我们考虑暴力枚举,但是暴力枚举的时间复杂度为O(定义另一个字符串c,将s加到c上直到c的长度为6。
2023-07-13 16:59:54 135 1
原创 牛客小白月赛74
这时我们可以在输入时记下当前正整数后包括当前位置有多少个数乘以当前数(当要进行操作时,选这个数数组的和要减去的值即为当前数包括当前位置即之后的数的个数之积)我们有m次操作,因此我们优先减去前m个积,这样就可以得到数组和的最小值。有一个n*m的方格图,上面有数字,每次走过一个数字该数字就被标记,此后所有被标记的数字都可以传送(花费零步),牛牛开局选择一个点(花费一步),他可以上下左右移动,求遍历所有格子他所要花费的最小步数。输入一个数n判断其能否被2,3,5,7之中的数整除。
2023-07-13 15:21:28 103 1
原创 AtCoder Beginner Contest 252
每个滚轮有一个按钮高桥可以在一个时间按下滚轮对应的按钮使滚轮停止,求高桥能使所有滚轮显示的数字相同的最短时间。我们用map将每个滚轮对应的数字对应的位置记下,在数字位置不重复的情况下,使每个滚轮上同一个数字被显示所用时间即为最后一位的位置(位置从0开始计算)。找出所有食物中最美味的食物对应的值,然后判断高桥不喜欢的食物中有没有对应的值的食物,如果有输出Yes,否则输出No。高桥有n个食物,其中有k个他不喜欢的食物,他会随机吃一个最美味的食物,求高桥有没有可能吃到不喜欢的食物。
2023-07-13 12:12:54 89 1
原创 牛客练习赛112
A题意:输入一个数n,如果n为素数,且每去掉最后一位数后仍是素数。题解:由于数据比较大,直接模拟的时间复杂度约为O(),会导致超时。我们可以用线性筛素数法先把1e6范围的素数找出来,再用二分查找判断每个n是否满足条件。
2023-07-12 21:59:27 144 2
原创 AtCoder Beginner Contest 253
在输入时将两个‘o'的坐标记下来,然后第一个点的x坐标减第二个点的x坐标求绝对值 ,第一个点的y坐标减第二个点的y坐标求绝对值两个绝对值相加即为答案。这样我们在进行删除操作时,如果c>=s[x],直接s.erase(x),把x从序列中删除,如果c<s[x],就把数x的频率减去c。我们可以用map<int,int>s来存储序列中数出现的频率,当进行操作一时,输入x,s[x]++;本题重点在于操作二,操作二要我们删除m个x,m=min(c,(序列中x的个数))。输入三个数a,b,c判断b是不是中位数。
2023-07-12 16:52:21 61 1
原创 牛客周赛 Round 2
然后再判断如果选了前一个数,和当前数,那么前前个数就不能选,那此时的和为dp[1][i]=dp[0][i-1]+a[i]+a[i-1],如果选当前的数,那么此时的和为dp[1][i-1]。首先当角度为0度时,此时只需要找到b和b+1中最高的一列使h[b],h[b+1]都等于最高的那一列,然后h[b]+=3,h[b+1]++即可。第一,如果h[b+1]+2大于h[b],那么h[b+1]+=3,而h[b]=h[b+1]。第二,即h[b+1]+2小于h[b],那么此时使h[b+1]=++h[b]。
2023-07-12 13:11:24 182 1
原创 AtCoder Beginner Contest 254
如果i=j或者j=0,a[i][j]=1,否则a[i][j]=a[i-1][j-1]+a[i-1][j]。给你一串长度为n的序列,你可以交换a[i]与a[i+k]的值,判断是否可以通过若干次操作使序列单调递增。本题可以用并查集的思想,将所有能交换位置的值连成一个连通块,即使a[i],a[i+k],连成连通块。给你一个数n,共有i行,0≤i≤N−1,每行对应的列数为j,0≤j≤i。否则a[i][j]=a[i-1][j-1]+a[i-1][j]如果i=j或者j=0,a[i][j]=1。即输出n阶杨辉三角。
2023-07-12 11:27:09 63 1
原创 AtCoder Beginner Contest 256(C)
首先,网格上的每个值都要小于对应行hi的值,且当a等于1时,b的值显然要小于h1-a的值,而c的值要小于h1-a-b的值,因此我们可以用相同的方法来优化每列的查找过程。同时我们可以先判断第一列是否满足条件,然后再判断在第一列满足条件的情况下第二列是否满足条件,然后再查找第三列满足条件且每行都满足条件的情况。给你6个整数h1,h2,h3,w1,w2,w3,求有多少种情况可以使3*3的网格的每行每列的数之和分别对应这六个数。我们用a,b,c,d,e,f,g,h,i来区分每个网格。
2023-07-11 16:18:50 64
原创 AtCoder Beginner Contest 309
完成操作后,我们把第一行超出的字符置于第二行,最后一列的位置,把最后一列超出的字符置于最后一行倒数第二列的位置,将最后一行超出的字符置于第一列的倒数第二行的位置。然后将最后一行往前移一位,也会有一位超出(注意输入时我们从1开始输入防止数组越界),同样忽略。有N种药,对于第i种药,高桥从第一天到第ai天要吃bi片药,求第几天高桥吃的药少于K片。用一个循环求出天数。有一个N*N的方阵,将其外圈的所有数顺时针移动一位,输出移动后的方阵。3*3的九宫格,输入A,B判断A,B是否相邻。至此,我们就得到了最后的方阵。
2023-07-09 18:58:00 61 1
原创 Codeforces Round 883 (Div. 3)
求重叠部分的面积时可以用相似三角形的知识,如上图,h=2,d=4,重叠部分的高度我们可以通过我们已知的顶点位置求得,设为h1。所以我们只需要在每行每列或两条对角线上找到3个相同的棋子,棋子对应的就是答案,如果没有说明平局输出DRAW。我们要注意三角形的重叠部分,要计算树的面积,可以算出所有三角形的面积之和再减去重叠的面积。如图所示,只需要把绳子长度小于 钉子高度的绳子割断,就可以使糖落地。一个割绳子游戏,要用最少的刀数使糖落地,求出割断绳子数的最小值。三个人玩井字棋,找出赢家,如果没有,输出DRAW。
2023-07-09 16:42:46 201 1
原创 牛客练习赛113
使字符串变为回文字符串,求有多少种不同的方案,答案对1e9+7取模。2.令sum=1,如果对称位置的字符都是问号,则sum*=26(因为问号可以变成26种字母,都为问号的情况下,多了26种组合)。即一个顶点,链接了其他n-1个点,这样任意两个点的直径都不会超过2(由端点到顶点再到另一个端点)。小红想知道,n个节点构成的所有基环树中,最小的直径是多少?1.如果对称位置的字符不相等,且不都不是问号,直接输出0。除了3个节点时,只有一种基环树,最小直径为1。所以当n=3时答案为1,当n>3时答案为2。
2023-07-09 15:33:29 125 1
原创 Codeforces Round 882 (Div. 2)
我们可以将序列分为k组,设我们有k-1个隔板,可以使序列分为k组,当隔板按两数的差值从大到小的顺序插入序列的间隙中时,可以得到f(l,r)各组的值的和的最小值。存储差值时,可以使用vector来存储,用sort函数对其从大到小排序,每插入一个隔板就把插入隔板处对应的差值从中删除,直到隔板用完。当然,我们也可以先将所有的差值相加求和,然后再减去差值中前第k-1大之前的所有的数。有n(a0...an-1)个人可以分为k组,求出各组f(l,r)值的和的最小值。
2023-07-07 13:14:10 336 1
原创 Atcoder 266(C - Convex Quadrilateral)
考虑到内角不大于180°,我们可以运用叉积计算,叉积的第一个向量叉乘第二个向量的结果小于0,就说明第一个向量逆时针与第二个向量的夹角小于180°。输入四个点(A,B,C,D按逆时针顺序分布)判断其组成的几何图形是否为“凸”的,即任意内角不大于180°。叉积的计算方式:A(xa,ya) X B(xb,yb)=
2023-07-06 18:16:01 183 1
原创 牛客周赛 Round 1
对于后n行,定义k=1,从1+k到n+k列和3*n-k列到4*n-k列为‘*’,其余都为‘.’。从3*n+1行到4*n行每行k+1。对于前3*n行,从1到n列和3*n列到4*n列为‘*’,其余都为‘.’。因为n
2023-07-03 11:33:34 220 1
原创 AtCoder Beginner Contest 308
令flag=1,如果在1到8个数中有数不符合3个条件中的一个使flag=0。再最后判断flag是否为1,为1输出Yes,否则输出No。高桥吃了n盘寿司,不同颜色的盘子Ci对应不同的价格,颜色Di对应的价格为Pi,i>1,如果颜色Ci未在Di中出现则价格为P0。从D1开始找直到Dm,或者找到为止,如果找到了总价加上Pi,如果没找到加上P0。满足输出Yes,不满足输出No。求8个整数组成的序列是否满足。2.在100到675之间。
2023-07-01 23:20:43 363
原创 牛客小白月赛75
求n级好豆子就要知道n-1级坏豆子和好豆子,而n-1级好豆子和坏豆子又由n-2级好豆子和坏豆子组成,所以我们可以先求2级好豆子和坏豆子,逐级往下推,得到n级好豆子。有n个题目,第i个题目的难度值为ai,给你x,y,如果ai小于x则崇拜值减一,如果大于y则崇拜值加三,可以调整题目顺序,求讲解过程中的最大崇拜值。x-1级坏豆子 x-1级好豆子。x-1级好豆子 x-1级坏豆子。x级好豆子: x-1级坏豆子 x-1级坏豆子。x级坏豆子: x-1级好豆子 x-1级好豆子。求出x+y和x+z中更小的一个输出。
2023-07-01 11:30:11 242
原创 Educational Codeforces Round 151 (Rated for Div. 2)
当x等于1的情况下,如果k大于2,则只需要判断n为奇数或者是偶数,如果是偶数则所有的数都可以用n/2个2相加得到。如果是奇数,则可以用n/2-1个2加上3得到。当x等于1,且k等于2的情况下,则只需判断n是否为偶数,如果是偶数则所有的数都可以用n/2个2相加得到。如果是奇数,则无法相加得到。显然如果x不等于1的情况下,所有的数n都可以由n个1相加得到。给定一个整数n,用1到k,x除外的数使它们的和等于n。求出所用的数的个数,并输出它们。
2023-06-30 14:30:27 268 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人