自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode 1775. 通过最少操作次数使数组的和相等(贪心)

题意:给你两个长度可能不等的整数数组 nums1 和 nums2 。两个数组中的所有值都在 1 到 6 之间(包含 1 和 6)。每次操作中,你可以选择 任意 数组中的任意一个整数,将它变成 1 到 6 之间 任意 的值(包含 1 和 6)。请你返回使 nums1 中所有数的和与 nums2 中所有数的和相等的最少操作次数。如果无法使两个数组的和相等,请返回 -1 。数据范围:1 <= nums1.length, nums2.length <= 1e51 <= nums

2021-02-28 18:59:47 210

原创 LeetCode 1774. 最接近目标价格的甜点成本(背包dp)

题意:你打算做甜点,现在需要购买配料。目前共有 n 种冰激凌基料和 m 种配料可供选购。而制作甜点需要遵循以下几条规则:必须选择 一种 冰激凌基料。可以添加 一种或多种 配料,也可以不添加任何配料。每种类型的配料 最多两份 。给你以下三个输入:baseCosts ,一个长度为 n 的整数数组,其中每个 baseCosts[i] 表示第 i 种冰激凌基料的价格。toppingCosts,一个长度为 m 的整数数组,其中每个 toppingCosts[i] 表示 一份 第 i 种冰激凌配料的价

2021-02-28 18:59:06 210

原创 LeetCode 1773. 统计匹配检索规则的物品数量

题意:给你一个数组 items ,其中 items[i] = [typei, colori, namei] ,描述第 i 件物品的类型、颜色以及名称。另给你一条由两个字符串 ruleKey 和 ruleValue 表示的检索规则。如果第 i 件物品能满足下述条件之一,则认为该物品与给定的检索规则 匹配 :ruleKey == "type" 且 ruleValue == typei 。ruleKey == "color" 且 ruleValue == colori 。ruleKey == "

2021-02-28 18:57:38 70

原创 Codeforces1468 C. Berpizza(堆+队列)

题意:解法:操作2用队列维护操作3用堆维护操作2删除时无法将操作3的定向删除,因此再开一个del[]数组,标记一下已经被删除的数.code:#include <bits/stdc++.h>#define int long longusing namespace std;const int maxm=2e6+5;struct PI{ int first,second; friend bool operator<(const PI& a,co

2021-02-28 00:09:21 366

原创 Codeforces1468 E. Four Segments(木桶原理)

题意:解法:将线段按长度排序,那么a[1]*a[3]就是答案.原理是长和宽取决于短的那条边.code:#include <bits/stdc++.h>#define int long longusing namespace std;const int maxm=3e5+5;int a[maxm];void solve(){ for(int i=1;i<=4;i++){ cin>>a[i]; } sort(a+1

2021-02-27 11:41:31 154

原创 Codeforces1468 N. Waste Sorting(模拟)

题意:解法:模拟即可:前三种垃圾只能放到前三种桶,然后桶1只能接收垃圾4,桶2只能接收垃圾5,因此向桶1和桶2分别放垃圾4和垃圾5,最后判断垃圾3还能不能放下剩余的即可.code:#include <bits/stdc++.h>#define int long longusing namespace std;const int maxm=3e5+5;int a[maxm];int c[maxm];void solve(){ for(int i=1;i&lt

2021-02-27 11:37:16 259

原创 Codeforces478 B. Random Teams(数学)

题意:将N个人分成M组,每组至少一人,在比赛结束时,同一组的人两两之间都会成为朋友,不同分组的分组方案得到的朋友对数不同。你的任务是求出最小和最大的朋友对数。数据范围:m<=n<=1e9解法:ma:令(m-1)组只有一个人,剩下一组n-(m-1)个人mi:平均分成m组即可code:#include <bits/stdc++.h>#define int long longusing namespace std;signed main(){ io

2021-02-27 11:04:38 512

原创 Codeforces478 A. Initial Bet(水题)

题意:有5个人,每人都有b个硬币,其中b>0,他们可以把自己的一个硬币给另一个人。现在给你经过若干次操作后每个人拥有的硬币数c(i),让你求他们之前每个人有多少硬币。如果无解输出-1。数据范围:0<=c(i)<=100解法:判断五个人的硬币和是否是5的倍数即可.特判五个人的硬币和为0的情况,这时候也是无解.code:#include <bits/stdc++.h>using namespace std;signed main(){ ios::

2021-02-27 10:57:53 107

原创 Codeforces1487 C. Minimum Ties(数学,构造)

题意:解法:设x为胜利次数,y为平局次数,因为所有队分数相同,那么有:x+y=n∗(n−1)2,3x+2y=kn,解得:x=n∗(k−n+1),y=n∗(3n−32−k),当n为奇数时,令k=3n−32,此时平局次数最少,即每支队伍胜利n−12次,平局0次.当n为偶数时,令k=3n−42,此时平局次数最少,即每支队伍胜利n−22次,平局1次.设x为胜利次数,y为平局次数,因为所有队分数相同,\\那么有:x+y=\frac{n*(n-1)}{2},3x+2y=kn,\\解得:x=n*(k-n+1),

2021-02-26 12:09:50 247 2

原创 Codeforces1487 B. Cat Cycle(数学)

题意:解法:题目求第k秒的位置,即走k−1步之后的位置.当n为偶数时,两只猫不会相遇.当n为奇数时:每n2秒相遇一次,每次相遇,b猫的位置增加1,那么b猫从开始到相遇位置增加n2+1,设x=n/2,则ans=(kx∗(x+1)+k%x)%n+1题目求第k秒的位置,即走k-1步之后的位置.\\当n为偶数时,两只猫不会相遇.\\当n为奇数时:\\每\frac{n}{2}秒相遇一次,每次相遇,b猫的位置增加1,\\那么b猫从开始到相遇位置增加\frac{n}{2}+1,\\设x=n/2,则ans=

2021-02-26 11:00:43 279

原创 LeetCode 836. 矩形重叠(判断两个矩形是否相交)

题意:矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。矩形的上下边平行于 x 轴,左右边平行于 y 轴。如果相交的面积为 正 ,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。给出两个矩形 rec1 和 rec2 。如果它们重叠,返回 true;否则,返回 false 。数据范围:rect1.length == 4rect2.length == 4-1e9 <= rec1[i]

2021-02-26 09:47:07 715

原创 Linux压缩解压类指令

文章目录gzip/gunzip:zip/unzip:tar:gzip/gunzip:gzip压缩,只能将文件压缩为*.gzgunzip解压压缩:gzip abc.txt得到的文件为abc.txt.gz解压:gunzip 要解压的文件ps:gzip压缩文件后,不会保留原文件.zip/unzip:zip压缩unzip解压压缩:zip [选项] abc.zip解压:unzip [选项] abc.zipzip常用选项:-r 递归压缩(将整个目录文件夹压缩为一个文件).

2021-02-26 07:45:36 909 1

原创 Linux搜索查找类指令

文章目录find:locate:grep:find:从指定目录向下递归遍历所有子目录,将满足条件的结果显示在终端find [搜索范围(目录位置)] [选项] [参数]常用选项:-name 参数为文件名,按文件名查找文件-user 参数为用户名,查找属于某用户的文件-size 参数为文件大小,按文件大小查找文件其中size的参数:10k,表示查找=10k的.+10k,表示查找>10k的-10M,表示查找<10M的带通配符查找的例子:find /root -name.

2021-02-26 07:16:54 151

原创 Codeforces1485 B. Replace and Keep Sorted(前缀和)

题意:解法:显然a[i]能修改的数的个数为(a[i+1]-a[i]-1)+(a[i]-a[i-1]-1),对于每个数,令b[i]=a[i]能修改的数的个数,并处理前缀和.令code:#include <bits/stdc++.h>#define int long longusing namespace std;const int maxm=1e5+5;int sum[maxm];int a[maxm];int b[maxm];int n,q,k;signed m

2021-02-25 20:36:37 198

原创 2021牛客寒假算法基础集训营6 B.系数(卢卡斯定理)

题意:解法:f(x)%3=(x2+x+1)n=((x−1)2+3x)n由于3x%3=0,因此f(x)=(x−1)2n第k项的系数为C(2n,k)∗(−1)2n−k因为可以%3,C(2n,k)用卢卡斯定理算一下就行了.f(x)\%3=(x^2+x+1)^n \\=((x-1)^2+3x)^n \\由于3x\%3=0,\\因此f(x)=(x-1)^{2n} \\第k项的系数为C(2n,k)*(-1)^{2n-k}\\因为可以\%3,C(2n,k)用卢卡斯定理算一下就行了.f(x)%3=(x2

2021-02-25 20:09:07 133

原创 Linux时间日期类指令

文章目录date:设置日期:cal:date:显示当前日期:date显示当前年份date +%Ydate +%y显示当前月份:date +%m显示当前天:date +%d同理,时分秒为%H,%M,%S.自定义显示格式的一个例子:date "+%Y--+%m--%d"例如会显示2021--02--26执行效果:设置日期:设置时间date -s 字符串表示的时间例如:date -s "2020-10-10 10:10:10"执行该指令需要root权.

2021-02-25 15:56:56 92

原创 Codeforces1485 A. Add and Divide(枚举)

题意:解法:显然先进行操作2再进行操作1,当b=2时,答案再log2(a)左右,因此直接操作2的次数(只需要枚举到log2(a)),然后计算总操作次数,更新答案即可显然先进行操作2再进行操作1,\\当b=2时,答案再log2(a)左右,\\因此直接操作2的次数(只需要枚举到log2(a)),\\然后计算总操作次数,更新答案即可显然先进行操作2再进行操作1,当b=2时,答案再log2(a)左右,因此直接操作2的次数(只需要枚举到log2(a)),然后计算总操作次数,更新答案即可code:#in

2021-02-25 07:40:07 303

原创 LeetCode 867. 转置矩阵

题意:给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。数据范围:m == matrix.lengthn == matrix[i].length1 <= m, n <= 10001 <= m * n <= 1e5-1e9 <= matrix[i][j] <= 1e9解法:转置之后,ans[i][j]=a[j][i].code:class Solutio

2021-02-25 06:48:11 48

原创 LeetCode 259. 较小的三数之和(双指针)

题意:给定一个长度为 n 的整数数组和一个目标值 target,寻找能够使条件 nums[i] + nums[j] + nums[k] < target 成立的三元组 i, j, k 个数,(0 <= i < j < k < n)。数据范围:题目没说.解法:将序列排序,设a[i]<=a[j]<=a[k],枚举j和k,那么i需要满足<target-a[j]-a[k],在k右移的过程中,i只能左移,满足单调性,开一个指针维护即可.co

2021-02-25 05:55:59 94

原创 牛客练习赛73 D.离别(三指针+线段树)

题意:解法:考虑每个合法区间对答案的贡献.那么需要先将询问离线.枚举右端点r,对所有满足[l,r]中最多的数的个数为k的左端点l,执行c[l]++,对于在右端点r上的询问ql,qr=r,答案ans=sum{c[ql,r]}.sum{c[ql,r]}是区间和,由于c[]的区间和随着r的向右枚举,是动态变化的,因此用线段树维护.剩下的难点就是,枚举到r的时候,如何找满足条件的所有l,当固定r的时候,双指针维护一个最小的下标l,满足[l,r]中最多的数恰好出现k次,但是[l+1,r]也许

2021-02-25 05:38:00 67

原创 2021牛客寒假算法基础集训营6 A.回文括号序列计数(阴间题)

题意:解法:TMD,()不是回文啊,((才是回文,所以合法括号序列一定不满足条件。当n=0的时候输出1,其他情况输出0。有够阴间的。

2021-02-24 14:24:44 396 9

原创 牛客练习赛73 C.生涯回忆录(所有子集的Mex的和,组合数学)

题意:解法:问题显然为求所有子集的Mex的和.O(n)枚举Mex,设当前Mex为i,那么所有<i的数每个至少都要选一个:比如i-1有cnt[i-1]个,至少选一个的方案数为2^(cnt[i-1])-1.<i的数每个都至少选一个的方案数可以维护一个前缀积last.=i的数不能选,>i的数可选可不选,设>i的数有suf个,那么方案数为2^suf.Mex=i的方案数=上面方案数的乘积,Mex=i的贡献=方案数*i.累加每个Mex的贡献就是答案.code:

2021-02-24 13:27:50 246

原创 牛客练习赛73 B.遥远的记忆(并查集)

题意:解法:如果两个数相同,那么就用并查集合并起来,最后判断一共有多少个集合即可.code:#include <bits/stdc++.h>#define int long longusing namespace std;const int maxm=2e6+5;int pre[maxm];int a[maxm];int n;int ffind(int x){ return pre[x]==x?x:pre[x]=ffind(pre[x]);}signed

2021-02-24 12:12:59 90

原创 Linux文件目录类指令

文章目录pwd:ls:cd:mkdir:rmdir:pwd:pwd显示当前工作目录的绝对路径.执行效果:ls:ls [选项] [目录或文件]常用选项:-a 显示当前目录所有文件,包括隐藏文件.-l 以列表的方式显示文件.执行效果:cd:切换到指定目录:cd [指定目录的路径]回到home目录:cd或者cd ~回到上一级目录:cd ..mkdir:创建目录mkdir [选项] 目录常用选项:-p 创建多级目录rmdir:删除空目录rmdir

2021-02-24 11:32:58 731

原创 Linux帮助指令

man指令:获得帮助信息man [要查询的指令]执行man ls后的效果:help指令:显示shell内部的帮助信息[要查询的指令] --help执行ls --help后的效果:

2021-02-24 10:25:43 71

原创 Linux运行级别

Linux七个运行级别:0:关机(系统不能默认为0,否则无法正常使用)1:单用户2:多用户无网络3:多用户有网络4:保留5:图形界面6:系统重启(系统不能默认为6,否则无法正常使用)3和5比较常用.修改默认运行级别:进入配置文件/etc/inittab修改 id:5:initdefault: 这一行的数字.但是我在centos8执行vi /etc/inittab的内容是这样的:大概是后面的版本设置默认允许级别的指令变成:查看当前运行级别:systemctl get-de

2021-02-24 10:07:50 122

原创 hdu4586 Play the Dice(概率期望)

题意:有一个n面骰子,第i个面有值a(i),而且其中有m个面有颜色。现在投掷一次骰子,分数+=投到的面的值,如果投到有颜色的面,那么可以再投一次,求期望分数。数据范围:n<=200,m<=n,0<=a(i)<=200,解法:n个格子,有颜色的格子m个,设有颜色的格子权值和为x,没颜色的权值和为y,那么E=(xm+E)∗mn+yn−m∗n−mn移项得:E=x+yn−m=sum{a[i]}n−mn个格子,有颜色的格子m个,\\设有颜色的格子权值和为x,没颜色的权值和为y

2021-02-24 09:06:03 106

原创 Codeforces1490 G. Old Floppy Drive(二分)

题意:数据范围:1<=n,m<=2e5,-1e9<=a(i)<=1e9,1<=x<=1e9解法:令sum[]为a[]的前缀和,ma[]为sum[]的前缀max.(首先,观察到询问的x一定是>=1的)对于询问x,如果x已经被标记,那么可以直接返回答案.1.如果sum[n]<=0,且x>ma[n],那么一定无解.如果x<=ma[n],那么直接在ma[]上二分出一个最小的pos2,满足ma[pos2]>=x即可.2.如果su

2021-02-24 06:52:56 126

原创 LeetCode 358. K 距离间隔重排字符串(对拼消耗思想)

题意:给你一个非空的字符串 s 和一个整数 k,你要将这个字符串中的字母进行重新排列,使得重排后的字符串中相同字母的位置间隔距离至少为 k。所有输入的字符串都由小写字母组成,如果找不到距离至少为 k 的重排结果,请返回一个空字符串 ""。数据范围:题目没说.解法:类似leetcode 767:https://blog.csdn.net/weixin_44178736/article/details/114006786依据对拼消耗思想:可以看作每次取出一个数量最大的,然后选出另外k

2021-02-24 05:39:48 1509

原创 LeetCode 767. 重构字符串(对拼消耗思想)

题意:给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。数据范围:S 只包含小写字母并且长度在[1, 500]区间内。解法:依据对拼消耗思想,当出现次数最多的字符的数量cnt>(n+1)/2,那么无解.否则一定有解,考虑如何构造解:做法1:大顶堆存所有(数量,字符)二元组,每次取出堆顶的两个,接到答案串后面即可.code1://大顶堆#define PI pair<int,char>

2021-02-24 05:18:46 288

原创 LeetCode 1246. 删除回文子数组(区间dp)

题意:给你一个整数数组 arr,每一次操作你都可以选择并删除它的一个 回文 子数组 arr[i], arr[i+1], ..., arr[j]( i <= j)。注意,每当你删除掉一个子数组,右侧元素都会自行向前移动填补空位。请你计算并返回从数组中删除所有数字所需的最少操作次数。数据范围:1 <= arr.length <= 1001 <= arr[i] <= 20解法:令d[i][j]为消除[i,j]的最小次数,转移:1.枚举分割点,两边分别消除

2021-02-23 17:20:36 247

原创 LeetCode 1052. 爱生气的书店老板(尺取)

题意:今天,书店老板有一家店打算试营业 customers.length 分钟。每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。在某些时候,书店老板会生气。 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0。 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 X 分钟不生气,但却只能使用一次。请你返回这一天营业下来,最

2021-02-23 08:32:08 74

原创 LeetCode 159. 至多包含两个不同字符的最长子串(尺取)

题意:给定一个字符串 s ,找出 至多 包含两个不同字符的最长子串 t ,并返回该子串的长度。数据范围:题目没说.解法:枚举r,维护一个最小的下标l,满足[l,r]内字符种类不超过2即可.code:class Solution {public: int lengthOfLongestSubstringTwoDistinct(string s) { int n=s.size(); int ans=0; int l=0;

2021-02-23 08:09:28 287

原创 ARC113 C - String Invasion(思维,贪心)

题意:解法:容易发现:当存在s[i]==s[i+1]且s[i]!=s[i+2]时,可以将i之后的所有字符全部变成s[i].显然从后往前,遇到s[i]==s[i+1]且s[i]!=s[i+2]就操作一次.设下标为[0,n-1],那么在i位置进行操作对答案的贡献为(n-1)-i+1-mark[s[i]],其中mark[s[i]]是[i,n-1]中s[i]的数量.注意操作完之后要修改mark数组.code:#include <bits/stdc++.h>#define in

2021-02-22 07:28:08 241

原创 ARC113 B - A^B^C(欧拉降幂)

题意:解法:显然是计算%10的答案,但是10不是质数,不能直接用费马小定理,所以得用欧拉降幂.code:#include<bits/stdc++.h>#define int long longusing namespace std;const int maxm=2e5+5;const int mod=10;int a[maxm];int phi(int n){ int ans=n; for(int i=2;i*i<=n;i++){

2021-02-22 01:51:59 592

原创 ARC113 A - A*B*C(预处理)

题意:解法:枚举a,那么问题变为计算b*c<=k/a的数对数量.设f[i]为b*c=i的数量,那么f[]的前缀和就是b*c<=i的数量.f[i]可以枚举b的因子O(sq(i))计算,预处理[1,n]的f[]复杂度为O(n*sq).预处理完f[],并计算前缀和之后,在[1,k]内枚举i,ans+=f[k/i]即可.code:#include<bits/stdc++.h>#define int long longusing namespace std;con

2021-02-21 23:26:04 449 2

原创 LeetCode 5688. 由子序列构造的最长回文串的长度(dp)

题意:给你两个字符串 word1 和 word2 ,请你按下述方法构造一个字符串:从 word1 中选出某个 非空 子序列 subsequence1 。从 word2 中选出某个 非空 子序列 subsequence2 。连接两个子序列 subsequence1 + subsequence2 ,得到字符串。返回可按上述方法构造的最长 回文串 的 长度 。如果无法构造回文串,返回 0 。字符串 s 的一个 子序列 是通过从 s 中删除一些(也可能不删除)字符而不更改其余字符的顺序生成的字符串。

2021-02-21 22:35:36 150 1

原创 LeetCode 5687. 执行乘法运算的最大分数(dp)

题意:给你两个长度分别 n 和 m 的整数数组 nums 和 multipliers ,其中 n >= m ,数组下标 从 1 开始 计数。初始时,你的分数为 0 。你需要执行恰好 m 步操作。在第 i 步操作(从 1 开始 计数)中,需要:选择数组 nums 开头处或者末尾处 的整数 x 。你获得 multipliers[i] * x 分,并累加到你的分数中。将 x 从数组 nums 中移除。在执行 m 步操作后,返回 最大 分数。数据范围:n == nums.lengthm

2021-02-21 21:12:20 157

原创 LeetCode 5686. 移动所有球到每个盒子所需的最小操作数

题意:有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes ,其中 boxes[i] 的值为 '0' 表示第 i 个盒子是 空 的,而 boxes[i] 的值为 '1' 表示盒子里有 一个 小球。在一步操作中,你可以将 一个 小球从某个盒子移动到一个与之相邻的盒子中。第 i 个盒子和第 j 个盒子相邻需满足 abs(i - j) == 1 。注意,操作执行后,某些盒子中可能会存在不止一个小球。返回一个长度为 n 的数组 answer ,其中 answer[i] 是将所有小球移动到第

2021-02-21 21:05:03 92

原创 LeetCode 5685. 交替合并字符串

题意:给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回 合并后的字符串 。数据范围:1 <= word1.length, word2.length <= 100word1 和 word2 由小写英文字母组成解法:模拟即可,做法和序列归并差不多.code:class Solution {public: string mergeAl

2021-02-21 21:03:28 52

空空如也

空空如也

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

TA关注的人

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