chenfy27的刷题记录

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

03 2024 档案

leetcode3041 修改数组后最大化数组中的连续元素数目
摘要:给定一个下标从0开始的只包含正整数的数组nums,你可以将数组中任意元素的值增加至多1,修改后,从数组中选择一个或多个元素,并确保这些元素升序排列后是连续的,求它的最大长度。 将数组排序,然后从大到小处理,每个元素分别计算以它开始能得到的长度,包含它本身和加1后两种情况,递推即可。 class So 阅读全文

posted @ 2024-03-31 12:50 chenfy27 阅读(6) 评论(0) 推荐(0) 编辑

cf1945D 插队的最小花费
摘要:排队时前面有n个人,现在想通过插队来排进队伍前m,每次插队时可以选择前面的某个人x,与他互换位置,需要支付a[x]的费用给x,并且还要支付给中间每个人b[i]的费用。现在给定a[i]和b[i],求最小花费。 1<=m<=n<=2e5; 1<=a[i],b[i]<=1e9 分析:对于中间的某个人,要么 阅读全文

posted @ 2024-03-28 12:27 chenfy27 阅读(9) 评论(0) 推荐(0) 编辑

nc51012 小猫爬山
摘要:有n只猫,重量分别为C[i],要将所有小猫都放进缆车里,缆车的最大承重为W,问至少要多少辆缆车才能装下? 1<=n<=18; 1<=C[i]<=W<=1e8 n比较小,可以暴力搜索,dfs(x,g)表示当前已经分了g个组,考虑如何分配第x只猫,枚举将猫放进g组中的每一个,另外也可以让它单独一组。按体 阅读全文

posted @ 2024-03-27 20:40 chenfy27 阅读(13) 评论(0) 推荐(0) 编辑

abc310D 带限制的分组方案数
摘要:将n个人分成T组,有m条限制条件,第i个条件为{a[i],b[i]},表示a[i]与b[i]不能分到同一组,问总共有多少种可行的分组方案? 1<=T<=n<=10 分析:最多只有10人,直接爆搜也能过,可以再加个剪枝:如果剩下人每人单独一组都不够T组则不可行。另外,为了去重,可以按编号从小到大的顺序 阅读全文

posted @ 2024-03-27 18:25 chenfy27 阅读(12) 评论(0) 推荐(0) 编辑

abc329F Colored Ball
摘要:有编号为1~n的n个盒子,最初每个盒子里都有1个球,颜色为c[i]。有Q次询问,每次给出{a[i],b[i]},将编号为a[i]的盒子里的球全放进编号为b[i]的盒子里,要求输出操作后b[i]中有多少种颜色的球? 1<=n,Q<=2E5; a[i]!=b[i] 分析:用map维护每个盒子里不同颜色的 阅读全文

posted @ 2024-03-26 22:09 chenfy27 阅读(11) 评论(0) 推荐(0) 编辑

abc346E 网格染色
摘要:有个H行W列的网格,初始时所有格子的颜色为0,现有m组操作,格式为: T[i] A[i] X[i],当T[i]=1时,表示将第A[i]行都涂上第X[i]种颜色;当T[i]=2时,表示将第A[i]列都涂上第X[i]种颜色。后涂的颜色会覆盖先涂的颜色。 问全部操作完后,共有多少种颜色,以及每种颜色的数目 阅读全文

posted @ 2024-03-24 15:51 chenfy27 阅读(21) 评论(0) 推荐(0) 编辑

leetcode336 回文对
摘要:给定字符串数组words[n],寻找二元组(i,j)满足0<=i,j<n,并且i!=j,而且words[i]+words[j]是回文串,求满足条件的二元组的个数。 1<=n<=5000; 0<=words[i].length<=300; words[i]由小写英文字母组成。 判断回文可以检查正序和逆 阅读全文

posted @ 2024-03-24 13:51 chenfy27 阅读(18) 评论(0) 推荐(0) 编辑

abc346D 生成仅一处相同01串的最小代价
摘要:给定由0和1组成的字符串s[n],翻转第i个字符需要花费c[i],现在修改s,使得有且只有一个i满足s[i]==s[i+1],求最小花费。 2<=n<=2e5; 1<=c[i]<=1e9 可以动态规划,记dp[i][j][k]表示前i个字符,以j结尾,存在k处相等的最小花费,对每个位置,枚举改与不改 阅读全文

posted @ 2024-03-24 11:26 chenfy27 阅读(10) 评论(0) 推荐(0) 编辑

leetcode2940 找到Alice和Bob可以相遇的建筑
摘要:给出数组H[n]和多组询问Q[m],其中Q[i]={a[i],b[i]}表示查询最靠左的下标j,使得a[i]和b[i]都可以移到j处。从x处能移到y处的前提是x<y并且H[x]<H[y]。 1<=n<=5E4; 1<=H[i]<=1E9; 1<=m<=5E4; 0<=a[i],b[i]<=n-1 分 阅读全文

posted @ 2024-03-24 10:40 chenfy27 阅读(9) 评论(0) 推荐(0) 编辑

leetcode2312 卖木头块
摘要:给定高为m、宽为n的木块,同时给出prices[i]={h[i],w[i],price[i]},表示高为h[i]、宽为w[i]的木块可以卖得price[i]的钱。切割木块时只能水平或垂直一切到底,木块不能旋转,切割次数不限,求最多能卖多少钱。 1<=m,n<=200; 1<=prices.lengt 阅读全文

posted @ 2024-03-23 20:17 chenfy27 阅读(8) 评论(0) 推荐(0) 编辑

leetcode2781 最长合法子字符串的长度
摘要:给定长度为n且只包含小写字母的字符串word和禁用字符串数组forbidden,如果一个字符串不包含forbidden中的任何字符串,则称其为合法。求word中最长合法子字符串的长度,子字符串可以为空。 1<=n<=1e5; 1<=forbidden.length<=1e5; 1<=forbid[i 阅读全文

posted @ 2024-03-23 20:04 chenfy27 阅读(22) 评论(0) 推荐(0) 编辑

leetcode2953 统计完全子字符串的数目
摘要:给定只包含小写字母的字符串word和整数k,如果s的某个子串中每个字符恰好出现k次,并且相邻字母最多相差2,则称其为完全字符串。求word中完全字符串的数目。 1<=word.length<=1e5; 1<=k<=word.length 预处理出每个字母出现次数的前缀和,这样可以O(1)得到区间[l 阅读全文

posted @ 2024-03-23 19:13 chenfy27 阅读(7) 评论(0) 推荐(0) 编辑

leetcode2528 最大化城市的最小电量
摘要:给定数组st[n],其中st[i]表示第i座城市的供电数目,每个供电站的供电范围是r,一座城市的电量是所有能给它供电的供电站数目之和,现在还可建k座发电站,求所有城市中最小电量的最大值。 1<=n<=1e5; 0<=st[i]<=1e5; 0<=r<n; 0<=k<=1e9 最大化最小值,或者最小化 阅读全文

posted @ 2024-03-23 13:57 chenfy27 阅读(10) 评论(0) 推荐(0) 编辑

leetcode996 正方形数组的数目
摘要:给定非负整数数组A[n],返回A的不同排列数目,使用数组每对相邻元素之和是一个完全平方数。 1<=n<=12; 0<=A[i]<=1E9 记dp[st][i]表示已选择数的状态为st,并且最后选择数的下标为i的方案数,对于某个状态st,枚举最后选择的数i是哪个,以及上一个最后选择的数j是哪个,进行转 阅读全文

posted @ 2024-03-23 12:11 chenfy27 阅读(37) 评论(0) 推荐(0) 编辑

luoguB3647 Floyd最短路
摘要:给出一张由n个点m条边组成的无向图,求所有点对(i,j)之间的最短路。 n<=100; m<=4500; 1<=w<=1000 多源最短路模板题,注意循环顺序是kij,另外可能会有重边,因此两点之间的距离要初始化为inf,读入边权时取最小值。 #include <bits/stdc++.h> usi 阅读全文

posted @ 2024-03-23 11:15 chenfy27 阅读(13) 评论(0) 推荐(0) 编辑

leetcode992 K个不同整数的子数组
摘要:给定正整数数组nums[n]和一个整数k,返回nums中好子数组的数目。如果nums的某个连续子数组中不同的整数个数恰好为k,则称其为好数组。 1<=n<=2e4; 1<=nums[i],k<=n 先将问题做下转化:恰好为k的个数 = 最多为k的个数 - 最多为k-1的个数。而最多为k的个数可以用双 阅读全文

posted @ 2024-03-22 22:48 chenfy27 阅读(6) 评论(0) 推荐(0) 编辑

leetcode2963 统计好分割方案的数目
摘要:给定正整数数组nums[n],将数组分割成1个或多个连续子数组,如果不存在包含了相同数字的两个子数组,则认为是一种好分割方案,求好分割方案的数目,结果对1000000007取模。 1<=n<=1e5; 1<=nums[i]<=1e9 相同的数字只能分到同一个子数组,转化成区间合并问题。然后枚举每个可 阅读全文

posted @ 2024-03-21 22:37 chenfy27 阅读(5) 评论(0) 推荐(0) 编辑

leetcode1547 切割棍子的最小成本
摘要:有一根长度为n的木棍,从0到n标记了若干个位置。给定一个数组cuts[m],表示要在cuts[i]位置切开,每次切割的成本是当前木棍的长度,求总成本的最小值。 2<=n<=1e6; 1<=m<=min(n-1,100); 1<=cuts[i]<=n-1; cuts[i]各不相同 正向思考的话可以记忆 阅读全文

posted @ 2024-03-21 22:09 chenfy27 阅读(17) 评论(0) 推荐(0) 编辑

leetcode1312 让字符串成为回文串的最少插入次数
摘要:给定长为n的字符串s,每次操作可以在字符串的任意位置插入任意1个字符,如果要让s成为回文串,至少要操作多少次? 1<=n<=500 区间dp,记dp[i][j]表示让[i,j]区间成为回文串的最少操作次数,考虑s[i]与s[j]的相等关系进行转移。 class Solution { public: 阅读全文

posted @ 2024-03-21 21:34 chenfy27 阅读(6) 评论(0) 推荐(0) 编辑

leetcode375 猜数字大小2
摘要:A从1到n之间选择一个数字让B来猜,假设B猜数字x,如果猜对,直接结束;否则B需要支付金额x,然后A告诉B小了或者大了并继续猜。给定数字n,问能确保获胜的最小现金,无论A选择哪个数字。 1<=n<=200 区间dp,记dp[i][j]表示区间为[i,j]时获胜所需的最小现金,枚举每次猜的数字k,考虑 阅读全文

posted @ 2024-03-21 21:28 chenfy27 阅读(9) 评论(0) 推荐(0) 编辑

leetcode1771 由子序列构造的最长回文串的长度
摘要:给出两个字符串word1和word2,需要从word1和word2分别选出某个非空子序列s1和s2,要求连接s1与s2后得到回文串,求该回文串的最大长度。 word1和word2长度在[1,1000]内。 区间dp,将word1与word2拼接起来,转换成求单个字符串的的最长回文子序列问题,为了保证 阅读全文

posted @ 2024-03-21 21:04 chenfy27 阅读(8) 评论(0) 推荐(0) 编辑

leetcode516 最长回文子序列
摘要:给定长度为n的字符串s,求最长回文子序列的长度。 1<=n<=1000 区间dp,记dp[i][j]表示区间[i,j]能构成的最长回文串的长度,根据s[i]跟s[j]是否相等进行转移。 class Solution { public: int dp[1005][1005]; int longestP 阅读全文

posted @ 2024-03-21 20:50 chenfy27 阅读(4) 评论(0) 推荐(0) 编辑

leetcode3072 将元素分配到两个数组中2
摘要:给定数组nums[n],定义f(arr,val)表示数组arr中大于val的元素个数,需要操作n次将nums分配到两个数组里,具体如下: 第1次操作将nums[1]追加到arr1,第2次操作将nums[2]追加到arr2 后续第i次操作: 如果f(arr1,nums[i]) > f(arr2,num 阅读全文

posted @ 2024-03-20 21:37 chenfy27 阅读(14) 评论(0) 推荐(0) 编辑

leetcode552 学生出勤记录2
摘要:有n天,每天出勤可以是缺勤,迟到或正常,要求总缺勤天数少于两天,且不存在连续3天及以上的迟到,问有多少种可行的情况?结果对1e9+7取模。 1<=n<=1e5 记数类dp问题,用刷表法好写点,即假设当前为第i天,已缺勤j天,已连续迟到k天,方案数为dp[i][j][k],再分别枚举接下的一天选择什么 阅读全文

posted @ 2024-03-20 20:58 chenfy27 阅读(3) 评论(0) 推荐(0) 编辑

51nod1174 区间中最大的数RMQ
摘要:给出一个有n个数的序列,下标0 ~ n-1,有Q次查询,每次询问区间[l,r]的最大值。 如果有修改,可以考虑线段树,这里只有静态查询,可以用ST表,预处理时间O(nlogn),单次查询时间O(1)。 #include <bits/stdc++.h> using namespace std; #de 阅读全文

posted @ 2024-03-19 22:28 chenfy27 阅读(7) 评论(0) 推荐(0) 编辑

51nod2599 最近公共祖先LCA
摘要:给定一颗n个节点的树,根节点编号为1,有Q组询问,每次给定一对节点编号(x,y),求(x,y)的最近公共祖先。 求LCA有多种方法,这里给的是倍增法,预处理时间O(nlogn),单次查询时间O(logn),支持在线。 #include <bits/stdc++.h> using namespace 阅读全文

posted @ 2024-03-19 22:21 chenfy27 阅读(6) 评论(0) 推荐(0) 编辑

abc250G 股票交易
摘要:给出未来n天的股票交易价格p[i],每天可以选择买入1个单位、卖出1个单位、或者不交易。最初手里没有股票和无限资金,问n天结束后的最大获利。注意,n天结束后手里的股票价值为0。 1<=n<=2e5; 1<=p[i]<=1e9 反悔贪心,如果当天有利可图就卖出,同时买入当天股票,后面再涨就再卖出,相当 阅读全文

posted @ 2024-03-18 23:09 chenfy27 阅读(5) 评论(0) 推荐(0) 编辑

abc250E 判断前缀构成的集合是否相等
摘要:给定数组A[n]和B[n],有Q组询问,每次给出一组(x,y),问A中前x个元素构成的集合是否与B中前y个元素构成的集合相等? 1<=n,q<=2e5; 1<=a[i],b[i]<=1e9; 1<=x[i],y[i]<=n 可以用乘法和异或来实现对集合的哈希,另外需要借助一个set来避免重复元素对哈 阅读全文

posted @ 2024-03-18 22:53 chenfy27 阅读(13) 评论(0) 推荐(0) 编辑

abc253E 相邻元素之差不低于K的序列数
摘要:给定n,m,k,找一个序列A[n],使用满足1<=A[i]<=m,并且任意相邻两元素的差的绝对值大于等于k,求满足条件的序列个数,结果对998244353取模。 2<=n<=1000; 1<=m<=5000; 0<=k<=m-1 设dp[i][j]表示前i个数以j结尾的方案数,在计算dp[i+1][ 阅读全文

posted @ 2024-03-18 20:42 chenfy27 阅读(57) 评论(0) 推荐(0) 编辑

abc291E Find Permutation
摘要:有数组A[N],其元素值正好是1~N的一个排列。现在不知道具体的A,但已知M组条件,对于(x,y),有A[x]<A[y],问根据这m组条件能否唯一确定A,如果可以,输出Yes和A,否则输出No。 2<=N,M<=2E5; 1<=x[i],y[i]<=N 分析:排列唯一有两个等价条件: bfs拓扑排序 阅读全文

posted @ 2024-03-17 23:16 chenfy27 阅读(5) 评论(0) 推荐(0) 编辑

abc325D 打印机最多能打印的文档数
摘要:有n份文档和一台打印机,第i份文档在t[i]时刻进入打印区,停留d[i]时间后离开打印区,打印机可以在[t[i],t[i]+d[i]]范围内打印它,打印耗时不计,在打印完成后,需要1个单位时间恢复。问最多能打印多少份材料? 1<=n<=2e5; 1<=t[i],d[i]<=1e18 打印机每次应选择 阅读全文

posted @ 2024-03-17 19:15 chenfy27 阅读(27) 评论(0) 推荐(0) 编辑

abc324E 合并两字符串后能得到某个子序列的方案数
摘要:给定n个字符串s[n]和字符串t,从中任选一对下标(i,j),要求i<=j,让s[i]与s[j]连起来得到一个新的串,要求由新串删除0个或多个字符可以得到t,问存在多少对满足条件的下标对? 1<=n<=5E5; 1<=len(s[i]),len(t)<=5E5 分析:假设由字符串x能得到t的前缀长度 阅读全文

posted @ 2024-03-17 18:17 chenfy27 阅读(6) 评论(0) 推荐(0) 编辑

abc343F 区间第2大的出现次数
摘要:给定数组a[n],有Q组操作,格式为: 1 p x,将a[p]修改为x; 2 l r,查询区间[l,r]内第2大元素的出现次数。 1<=n,q<=2e5; 1<=a[i]<=1e9 用线段树维护各个区间的最大及次大元素的出现次数,合并时最多只保留两条记录。 #include <bits/stdc++ 阅读全文

posted @ 2024-03-17 16:11 chenfy27 阅读(4) 评论(0) 推荐(0) 编辑

leetcode84 柱状图中最大的矩形
摘要:给定数组H[n],表示柱状图中各个柱子的高度,每个柱子彼此相邻,且宽度为1。求该柱状图中,能够勾勒出来的矩形的最大面积。 1<=n<=1e5; 0<=H[i]<=1e4 枚举每个柱子作为最短时能得到的最大矩形,尽量往两边延伸,取最小值即为答案。 class Solution { public: in 阅读全文

posted @ 2024-03-17 14:38 chenfy27 阅读(9) 评论(0) 推荐(0) 编辑

leetcode795 区间子数组个数
摘要:给定数组nums[n]和两个整数left,right,找出nums中连续非空、并且最大元素在[left,right]范围内的子数组,统计所有满足条件子数组的个数。 1<=n<=1e5; 0<=nums[i]<=1e9; 0<=left<=right<=1e9; 保证答案在int内 枚举每个元素作为最 阅读全文

posted @ 2024-03-17 14:29 chenfy27 阅读(8) 评论(0) 推荐(0) 编辑

leetcode2334 元素值大于变化阈值的子数组
摘要:给定数组nums[n]和整数threshold,找到长度为k的子数组,满足子数组中每个元素都大于threshold/k,返回满足条件的任意一个k即可,如不存在,返回-1。 1<=n<=1e5; 1<=nums[i],threshold<=1e9 子数组每个元素都大于t,也就是最小值大于t。对于固定的 阅读全文

posted @ 2024-03-17 14:13 chenfy27 阅读(11) 评论(0) 推荐(0) 编辑

leetcode907 子数组的最小值之和
摘要:给定数组arr[n],求所有子数组中最小值的和,答案对1e9+7取模。 1<=n<=30000; 1<=arr[i]<=30000 考虑每个数作为最小值对应的子数组有多少个,计算对答案的贡献,而子数组的个数可以用单调栈来维护。数组元素可能相同,为了避免重复计数,用半开半闭区间。 class Solu 阅读全文

posted @ 2024-03-17 13:58 chenfy27 阅读(4) 评论(0) 推荐(0) 编辑

leetcode2104 子数组的范围和
摘要:给定数组nums[n],子数组的范围指子数组中最大元素与最小元素的差值,返回nums中所有子数组的范围之和。子数组是数组的连续非空序列。 1<=n<=1000; -1e9<=nums[i]<=1e9 分别考虑每个元素作为最小和最大值的情况,统计作为最小值的次数,作为最大值的次数,这个可以用单调栈求出 阅读全文

posted @ 2024-03-17 11:03 chenfy27 阅读(6) 评论(0) 推荐(0) 编辑

leetcode962 最大宽度坡
摘要:给定数组A[n],如果i<j,并且A[i]<=A[j],则称坡的宽度为j-i。求A中坡的最大宽度,如果不存在,返回0。 2<=n<=50000; 0<=A[i]<=50000 分析:二维偏序问题,先按元素值排序去掉一维,将符合条件的元素加入集合,然后在集合中根据第二维找最优答案。 class Sol 阅读全文

posted @ 2024-03-17 10:30 chenfy27 阅读(9) 评论(0) 推荐(0) 编辑

luoguP1901 发射站能接受到的最大能量
摘要:n个能量发射站排成一行,第i个发射站的高度为H[i],并能向两边同时发射值为V[i]的能量,发射的能量只会被两边最近且比它高的发射站接收。求所有发射站里能接收的最大能量。 1<=n<=1e6; 1<=H[i]<=2e9; 1<=V[i]<=1e4 先用单调栈求出每个发射站发出的能量被谁接收,更新接收 阅读全文

posted @ 2024-03-17 00:47 chenfy27 阅读(11) 评论(0) 推荐(0) 编辑

luoguP5788 数组中寻找右侧第一个大于它的数
摘要:给定数组a[n],对于每个元素a[i],求后面第1个比它大的元素的下标,如果不存在,则用0表示。 1<=n<=3e6; 1<=a[i]<=1e9 单调栈和单调队列都是类似的套路,先循环把容器中不符合条件的元素弹出,然后更新答案,再将元素入队。 #include <bits/stdc++.h> usi 阅读全文

posted @ 2024-03-17 00:33 chenfy27 阅读(25) 评论(0) 推荐(0) 编辑

abc174E 最小化不超过k次操作后木棍的最大长度
摘要:有n根木棍,第i根木棍长度为a[i],每次操作可以选一根木棍将其锯成两段,要求总操作次数不超过k。问最终所有木棍最大长度的最小值是多少? 1<=n<=2e5; 0<=k<=1e9; 1<=a[i]<=1e9 最小化最大值,或者反过来最大化最小值,优先考虑二分答案,对于某个特定的长度x,考虑将其锯成最 阅读全文

posted @ 2024-03-16 19:05 chenfy27 阅读(8) 评论(0) 推荐(0) 编辑

abc214D 全部路径最大边权之和
摘要:给定一颗包含n个顶点的树,第i条边连接u[i]和v[i],边权为w[i]。记f(i,j)表示顶点i到j的简单路径上边权的最大值,求 i=1n1j=i+1nf(i,j)。 2<=n<=1e5; 1<=u[i],v[i]<=n; 1<=w[i]<=1e 阅读全文

posted @ 2024-03-16 14:41 chenfy27 阅读(12) 评论(0) 推荐(0) 编辑

leetcode2250 统计包含每个点的矩形数目
摘要:有n个矩形,第i个矩形左下角在(0,0)处,右上角在(l[i],h[i])。另给出m个点(x[i],y[i]),问有多少个矩形覆盖了这个点,点在边上也算是覆盖。 1<=n,m<=5E4; 1<=l[i],h[i]<=1E9; 1<=h[i],y[i]<=100; 所有矩形互不相同,所有查询点互不相同 阅读全文

posted @ 2024-03-16 13:07 chenfy27 阅读(5) 评论(0) 推荐(0) 编辑

leetcode1847 最近的房间
摘要:有n个房间,rooms[i]={id[i],size[i]}表示第i个房间编号为id[i],面积为size[i],房间编号唯一。 现有k个查询query[j]={preferred[j],minsize[j]},表示要求面积至少为minsize[j],且编号跟preferred[j]最接近,如果有多 阅读全文

posted @ 2024-03-16 12:46 chenfy27 阅读(10) 评论(0) 推荐(0) 编辑

leetcode2426 满足不等式的数对个数
摘要:给定两个大小为n的数组nums1和nums2以及整数diff,统计满足以下条件的数对(i,j)的个数:0<=i<j<=n-1,并且nums1[i]-nums1[j]<=nums2[i]-nums2[j]+diff。 2<=n<=1e5; -1e4<=nums1[i],nums2[i]<=1e4; - 阅读全文

posted @ 2024-03-16 11:16 chenfy27 阅读(11) 评论(0) 推荐(0) 编辑

leetcode327 区间和的个数
摘要:给定数组nums[n]和整数lower与upper,求nums[n]中,元素之和在[lower,upper]范围内的子数组个数。 1<=n<=1e5; nums[i]在int范围内; -1e5<=lower<=upper<=1e5; 答案在int范围内 分析:子数组的和可以用前缀和来快速求出,假设当 阅读全文

posted @ 2024-03-16 10:52 chenfy27 阅读(5) 评论(0) 推荐(0) 编辑

leetcode493 统计重要翻转对的数目
摘要:给定一个数组nums[n],如果i<j并且nums[i]>2*nums[j],则称(i,j)是一个重要翻转对。求nums[n]中重要翻转对的数量。 1<=n<=5e4; nums[i]在int范围内 分析:直接套平衡树模板即可。 // Treap模板... class Solution { publ 阅读全文

posted @ 2024-03-16 10:27 chenfy27 阅读(4) 评论(0) 推荐(0) 编辑

abc281E Least Elements
摘要:给定数组a[n]以及两个数m与k,求数组a[n]上大小为m的滑动窗口里最小的k个数之和。 1<=k<=m<=n<=2E5; 1<=a[i]<=1E9 分析:直接套带前缀和的平衡树即可。 #include <bits/stdc++.h> using i64 = long long; // Treap模 阅读全文

posted @ 2024-03-15 22:35 chenfy27 阅读(4) 评论(0) 推荐(0) 编辑

abc135D 模13余5的数的个数
摘要:给定一个由0~9以及?组成的字符串,其中的?可以替换成0~9中任意1个数字,问有多少种情况使得这个数字模13的余数为5?结果对1e9+7取模。注意允许s有前导0。 1<=|s|<=1e5 记dp[i][j]表示前i个数字构成的数,模13余j的方案数。如果s[i]是数字,直接转移;如果是问题,枚举0~ 阅读全文

posted @ 2024-03-15 20:38 chenfy27 阅读(14) 评论(0) 推荐(0) 编辑

leetcode1755 最接近目标值的子序列和
摘要:给你一个整数数组nums和一个目标值goal,需要从nums中选出一个子序列,使子序列元素总和最接近goal,返回abs(sum-goal)可能的最小值。数组的子序列指通过移除原数组中的某些元素(可能全部或无)而形成的数组。 1<=nums.length<=40; -1e7<=nums[i]<=1e 阅读全文

posted @ 2024-03-14 20:19 chenfy27 阅读(7) 评论(0) 推荐(0) 编辑

leetcode2035 将数组分成两个数组并最小化数组和的差
摘要:给你一个长度为2n的整数数组,需要将它分成两个长度为n的数组,分别求出两个数组的和,并最小化两个数组和之差的绝对值。nums中每个元素都需要放入两个数组之一,求最小的数组和之差。 1<=n<=15; -1E7<=nums[i]<=1E7 直接暴搜的话最坏时间复杂度是O(2^30),会TLE,可以使用 阅读全文

posted @ 2024-03-14 20:11 chenfy27 阅读(25) 评论(0) 推荐(0) 编辑

abc234E 不小于X的数位构成等差数列的最小数字
摘要:给定X,求不小于X的整数,满足各个数位正好构成等差数列。 1<=X<=1E17 直接枚举首项和公差,找出所有可行的解,取最优值即可。 #include <bits/stdc++.h> using namespace std; #define int long long #define rep(i,a 阅读全文

posted @ 2024-03-12 21:57 chenfy27 阅读(3) 评论(0) 推荐(0) 编辑

abc221D 统计在线游戏人数
摘要:有一款在线游戏,共有n名注册玩家,第i名玩家从第a[i]天开始上线,持续在线b[i]天。现在要统计在线人数为x[i]的天数,其中1<=x[i]<=n。 1<=n<=2E5; 1<=a[i],b[i]<=1E9; 先按差分更新,然后求前缀和还原,再遍历一次统计答案,时间复杂度O(n)。 #includ 阅读全文

posted @ 2024-03-12 21:14 chenfy27 阅读(10) 评论(0) 推荐(0) 编辑

abc204D 双烤箱烹饪的最短时间
摘要:需要烹饪n道菜,第i道菜耗时t[i],有两个相同的烤箱,一个烤箱同一时间只能烹饪同一道菜。求烹饪完所有菜所需的最短时间? 1<=n<=100, 1<=t[i]<=1000 01背包变形,需要选出部分菜用烤箱1,其他用烤箱2,两者的最大值为结果,取所有可能的结果的最小值,即为答案。这里dp[i]表示总 阅读全文

posted @ 2024-03-12 21:02 chenfy27 阅读(15) 评论(0) 推荐(0) 编辑

abc222D 夹在两升序数组之间的升序数组个数
摘要:给定长度为n的两升序数组A[i]和B[i],其中A[i]<=A[i+1],B[i]<=B[i+1],并且0<=A[i]<=B[i]<=3000,找长度为n的数组C[i],满足A[i]<=C[i]<=B[i]。求满足该条件的C的个数,结果对998244353取余。 1<=n<=3000 设dp[i][ 阅读全文

posted @ 2024-03-12 20:57 chenfy27 阅读(4) 评论(0) 推荐(0) 编辑

abc336F 旋转矩阵谜题
摘要:有一个H行W列的矩阵,记n=H*W,每个格子分别有个[1,n]内的数字,对应1~n的一个排列。每次可以选择大小为(H-1)*(W-1)的子矩阵旋转180度。 给定初始状态,问20步以内是否可以将它还原为1~n的排列?如果可以,输出最小步数,否则输出-1。 3<=H,W<=8; 1<=a[i][j]< 阅读全文

posted @ 2024-03-12 15:21 chenfy27 阅读(23) 评论(0) 推荐(0) 编辑

arc144B 最大化加减操作后的最小值
摘要:给定数组A[i],以及两个数a和b,其中a<=b,每次可以任选一对下标(i,j),让A[i]增加a,同时A[j]减少b,操作次数不限。求能得到的min(A[i])的最大值。 由于每次加得少、减得多,总和必收敛,因此解一定存在,可以二分答案,条件是增加的次数不超过减少的次数。 #include <bi 阅读全文

posted @ 2024-03-11 21:52 chenfy27 阅读(3) 评论(0) 推荐(0) 编辑

abc261D 抛硬币的最大得分
摘要:抛n次硬币,对于第i次结果,如果正面朝上,得分为X[i],否则不得分。另外,还设置了m种连正奖励,即如果出现连续C[i]次正面朝上,可额外获得Y[i]得分。求可以获取的最大总得分。 1<=n,m<=5000; 1<=X[i],Y[i]<=1E9; 1<=C[i]<=n 记dp[i][j]表示前i次抛 阅读全文

posted @ 2024-03-11 21:47 chenfy27 阅读(11) 评论(0) 推荐(0) 编辑

abc311D 走迷宫之不撞南墙不回头
摘要:有个大小为n*m的二维图,.为空地,#为障碍,最外层一圈固定为障碍,起点(2,2)固定为空地,每次可以沿上下左右其中一个方向走,直到碰见障碍才能转向。问最多可以走过多少个空地?初始时方向任意,可以走多次。 bfs模拟,由于中途不能转向,把当前方向也塞到节点里。除1234分别对应上下左右外,新增一种状 阅读全文

posted @ 2024-03-11 21:32 chenfy27 阅读(6) 评论(0) 推荐(0) 编辑

abc315E 解锁1号图书要读的最少书
摘要:有n本书,编号分别为1~n。在读第i本书之前需要先读c[i]本书,编号分别为p[i][1],p[i][2],...p[i][c[i]]。现想读1号书,需要提前读至少多少本书,输出任意一组方案。 2<=n<=2E5; 0<=c[i]<n,保证有解。 类似求拓扑序,由于要输出方案,用dfs更方便。另外题 阅读全文

posted @ 2024-03-11 21:22 chenfy27 阅读(9) 评论(0) 推荐(0) 编辑

luoguP3807 P为1E6以内质数的组合数
摘要:有T次询问,每次给出整数n,m,p,计算C(n+m,n)%p的值。输入保证p为质数。 1<=n,m,p<=1E5; 1<=T<=10 n很大,p为百万级以内的质数,并且需要多次求组合数时,一般用lucas定理来计算组合数:lucas(n,k,p) = lucas(n/p,k/p,p) * C(n%p 阅读全文

posted @ 2024-03-10 20:20 chenfy27 阅读(7) 评论(0) 推荐(0) 编辑

luoguB3717 N在1E6以内的组合数
摘要:给出T次询问,每次给出n和m,求C(n,m)对998244353取模的结果。为了避免输出太多内容,只需要输出所有查询结果的异或和。 1<=T<=5E6; 0<=m<=n<=5E6 n为百万级、p为大质数,需要多次求组合数,一般先O(n)预处理出所有数的阶乘及其对应的乘法逆元,然后O(1)处理每次询问 阅读全文

posted @ 2024-03-10 20:14 chenfy27 阅读(12) 评论(0) 推荐(0) 编辑

abc145D 骑士走棋盘到达目的地的方案数
摘要:有一张二维棋盘,骑士每次可以从(i,j)移到(i+1,j+2)或(i+2,j+1)。求骑士从位置(0,0)移到(X,Y)的路径方案数?结果对1E9+7取模。 1<=X,Y<=1E6 dp的时间复杂度为O(XY),会TLE,因此考虑数学方法。假设走法1用了A次,走法2用了B次,那么有A+2B=X,并且 阅读全文

posted @ 2024-03-10 15:46 chenfy27 阅读(14) 评论(0) 推荐(0) 编辑

abc156D 带朵数限制的不同扎花方案数
摘要:cfy有n种花,每种各1朵,需要从中选出1种或多种来扎成花束,要求花的朵数不能是a或b,问可以制作多少种不同的花束?结果对1E9+7取模。 2<=n<=1E9; 1<=a<b<=min(n,2E5) 每朵花都有选与不选两种情况,去掉都不选的情况,共2^n-1种方案。然后再减掉选a种和选b种的情况,方 阅读全文

posted @ 2024-03-10 15:21 chenfy27 阅读(11) 评论(0) 推荐(0) 编辑

abc344E 维护元素唯一的序列
摘要:给定序列A[N],元素值各不相同,有Q个操作,格式如下: 1 x y: 在元素x后面插入元素y,保证插入时x唯一。 2 x: 将元素x从序列中删除,保证删除时x唯一。 输出所有操作完成后的序列。 1<=N,Q<=2E5; 1<=A[i]<=1E9; A[i]!=A[j] 用链表来快速插入和删除,另外 阅读全文

posted @ 2024-03-10 14:53 chenfy27 阅读(13) 评论(0) 推荐(0) 编辑

abc160E 吃苹果能得到的最大美味度
摘要:有A个红苹果,美味度分别为p[i];有B个青苹果,美味度分别为q[i];另外还有C个无色苹果,美味度分别为r[i],无色苹果在吃之前可以涂成红色或青色。现在要吃X个红苹果和Y个青苹果,求能吃到的最大美味度。 1<=X<=A<=1E5; 1<=Y<=B<=1E5; 1<=C<=1E5; 1<=p[i] 阅读全文

posted @ 2024-03-10 12:37 chenfy27 阅读(24) 评论(0) 推荐(0) 编辑

abc170D 不能整除其他元素的个数
摘要:题面:给定数组A[n],问A中存在多少个下标x,满足A[x]不能整除数组中所有其他元素。 范围:1<=n<=2E5; 1<=A[i]<=1E6 思路:先计数,然后用类似质数筛的方式处理出整除关系,遍历一次统计结果。 #include <bits/stdc++.h> using namespace s 阅读全文

posted @ 2024-03-10 02:02 chenfy27 阅读(5) 评论(0) 推荐(0) 编辑

abc153E 杀死怪兽所需的最少魔法
摘要:题面:cfy正在打体力为H的怪兽,cfy有n种咒语,第i种咒语可以造成A[i]点伤害,但需要花费B[i]点魔法,咒语使用次数不限,当怪兽体力小于等于0时死亡。求杀死怪兽需要的最少魔法。 范围:1<=H<=1E4; 1<=n<=1E3; 1<=A[i],B[i]<=1E4 思路:完全背包的变形,记dp 阅读全文

posted @ 2024-03-10 01:21 chenfy27 阅读(16) 评论(0) 推荐(0) 编辑

abc112D 和为定值时的最大公约数
摘要:题面:给定正整数n和m,构造一个长度为n的正整数序列a[i],满足a[i]之和为m。求gcd({a[i]})的最大值。 范围:1<=n<=1E5; n<=m<=1E9 思路:设k为答案,由于k是a[i]的公约数,那么k也能被m整除,因此枚举m的约数判断是否可行。 #include <bits/std 阅读全文

posted @ 2024-03-10 00:20 chenfy27 阅读(14) 评论(0) 推荐(0) 编辑

abc281D 最大的能被d整除的k数之和
摘要:题面:给定数组A[n],从中取出k个元素,使元素之和为d的倍数。求满足条件的元素之和的最大值。 范围:1<=k<=n<=100; 1<=d<=100; 0<=A[i]<=1E9 思路:记dp[i][j][k]表示前i个数里选了j个,并且元素之和除d的余数为k,按选与不选两种情况递推,这里用的刷表法。 阅读全文

posted @ 2024-03-09 21:46 chenfy27 阅读(6) 评论(0) 推荐(0) 编辑

abc217E 带排序的查询
摘要:题面:初始时有个空序列A,接下来有Q组操作,每个操作的格式如下: 1 x,将x追加到A的末尾。 2,输出A开头的元素值,并移除。请求时保证A非空。 3,对A中元素从小到大排序。 范围:Q<=2E5; x<=1E9 思路:用一个队列来维护还没有排序的元素,再用一个优先队列来维护已排序的元素。由于每次只 阅读全文

posted @ 2024-03-09 20:50 chenfy27 阅读(5) 评论(0) 推荐(0) 编辑

abc161D 第k个轮数
摘要:题面:一个正整数,如果其10进制表示中相邻各位数之差的绝对值不超过1,则称为轮数。求第k小的轮数。 范围:k<=1E5 思路:数据范围较小,直接bfs。 #include <bits/stdc++.h> using namespace std; #define int long long #defi 阅读全文

posted @ 2024-03-09 20:43 chenfy27 阅读(9) 评论(0) 推荐(0) 编辑

abc202D aab aba baa
摘要:由x个a和y个b构成长度为x+y的字符串,求字典序第k小的那个串。 1<=x,y<=30; 保证k有效。 思路:x个a和y个b能构成的不同字符串有f(x,y)=(x+y)!x!y!个。从左到右枚举各个字符,假设当前还剩x个a和y个b,如果放a,后续有f(x-1,y)种;如 阅读全文

posted @ 2024-03-09 20:36 chenfy27 阅读(7) 评论(0) 推荐(0) 编辑

abc315E Prerequisites
摘要:题面:有编号分别为1~n的书,读第i本书之前需要先读c[i]本书,编号分别为p[i][1], p[i][2], ...。现在想读编号为1的书,问需要提前读至少多少本书,给出任意一组可行的方案。 范围:2<=n<=2E5; sum(c[i])<=2E5 思路:类似拓扑排序,这里要输出方案,用dfs更方 阅读全文

posted @ 2024-03-09 15:46 chenfy27 阅读(8) 评论(0) 推荐(0) 编辑

abc172D 约数之和
摘要:题面:记f(x)表示x的约数个数,例如,12的约数有1,2,3,4,6,12共6个,因此f(12)=6。给定n,求k=1nkf(k)。 范围:n<=1E7 思路:用类似素数筛的做法预处理出所有f,然后遍历一次得到答案,时间复杂度O(nloglogn)。 #include 阅读全文

posted @ 2024-03-09 15:37 chenfy27 阅读(18) 评论(0) 推荐(0) 编辑

abc230E Fraction Floor Sum
摘要:题面:给定n,计算 i=1nni 范围:1<=n<=1E12 思路:分块,假设区间[l,r]的结果都相同,即n/l=n/r,根据l可以推算出r,那么这个区间对结果的贡献就是区间长度乘以结果,时间复杂度为O(sqrtn)。 #include <bits/s 阅读全文

posted @ 2024-03-09 10:44 chenfy27 阅读(44) 评论(0) 推荐(0) 编辑

abc317D 选举总统
摘要:题面:有n个区,第i个区有x[i]+y[i]个选民,其中x[i]支持A,y[i]支持B,支持人数多的一方获得该区的全部票数z[i],全部区的票数之和多者获胜,问至少还要多少选民从支持B改为支持A,才能让A胜出? 范围:1<=n<=100; 0<=x[i],y[i]<=1E9; x[i]+y[i]为奇 阅读全文

posted @ 2024-03-09 10:09 chenfy27 阅读(13) 评论(0) 推荐(0) 编辑

abc323D 合并泥巴
摘要:题面:有n种泥巴,第i种有c[i]块,大小为s[i]。每次操作可以选择2块大小同为x的泥巴,将其合并成1块大小为2x的泥巴。操作次数不限,问最终至少有多少块泥巴? 范围:n<=1E5; s[i],c[i]<=1E9 思路:贪心,从小到大,能合并就合并,结果肯定是最少的。注意map的使用,如何实现边遍 阅读全文

posted @ 2024-03-09 09:59 chenfy27 阅读(7) 评论(0) 推荐(0) 编辑

abc342D 乘积为完全平方数的对数
摘要:题面:给定长为n的数组A,问有多少对下标(i,j)满足A[i]*A[j]为完全平方数? 范围:n<=2E5; A[i]<=2E5 思路:完全平方数即质因子的个数为偶数,因此对元素进行化简,把偶次质因子都去掉,再统计即可。另外,0乘任何数都为0,需要单独处理。 #include <bits/stdc+ 阅读全文

posted @ 2024-03-09 09:53 chenfy27 阅读(21) 评论(0) 推荐(0) 编辑

arc127A 分巧克力
摘要:题面:有一块大小为H*W的巧克力,要分给n个人,第i个人要分边长为2^a[i]的正方形,问是否够分? 范围:H,W<=1E9; n<=1000; a[i]<=25 思路:贪心,关键是先处理大请求,并且要用大块来处理大请求。 将请求按从大到小依次处理,优先处理大请求,如果处理不了,则无解。 用大根堆维 阅读全文

posted @ 2024-03-09 09:42 chenfy27 阅读(5) 评论(0) 推荐(0) 编辑

abc325E 火车+班车的最短路
摘要:题面:有n座城市,从城市i到城市j可以坐班车,需要A*D[i][j]时间,也可以坐火车,需要B*D[i][j]+C时间。可以从班车换到火车,但反过来不行。换乘时间不计,求从城市1到城市n的最短时间。 范围:n<1000; A,B,C<1E6; D[i]][j]<1E6并且D[i][i]=0。 思路: 阅读全文

posted @ 2024-03-09 09:29 chenfy27 阅读(10) 评论(0) 推荐(0) 编辑

abc330E 单点更新后的Mex
摘要:题面:给定长为n的数组A,有q组询问,每次将A[i]修改为x[i],输出每次修改后A的mex值。 范围:n,q<2E5; A[i],x[i]<1E9 思路:注意到,长度为n的数组,其mex值最大为n。因此,用set维护0~n中没有出现在A中的数,同时用map维护A中各数的现次数。 #include 阅读全文

posted @ 2024-03-08 21:59 chenfy27 阅读(15) 评论(0) 推荐(0) 编辑

abc259D 沿圆是否可以从S走到T
摘要:题面:二维平面上有n个圆,第i个圆的圆心在(x[i],y[i]),半径为r[i],另外给定圆上的点S和T,问从S出发沿着圆是否可以到达T? 范围:n<3E3; x[i],y[i],r[i]<1E9 思路:如果两圆相交,那么可以互相到达,枚举所有圆对,检查两两之间是否相交,用并查集维护连通关系。最后判 阅读全文

posted @ 2024-03-08 21:54 chenfy27 阅读(9) 评论(0) 推荐(0) 编辑

abc331E 两数组元素间带限制的最大和
摘要:题面:给定大小为n的数组A,大小为m的数组B,那么共有n*m个元素和。现给出L对禁用下标(a,b),找一对不在L中的下标(i,j),使用A[i]+B[j]最大,求该最大值。 范围:n,m<=1e5; 1<=L<=min(1e5,nm-1) 思路:先对A和B按从大到小排序,然后让i指向A起始位置,j指 阅读全文

posted @ 2024-03-08 12:37 chenfy27 阅读(6) 评论(0) 推荐(0) 编辑

abc332D 将矩阵A变成B的最小步数
摘要:题面:给定两个H行W列的矩阵A和B,每次操作可以交换相邻的行或列,问是否可以将A变成B?如果可以,输出最少操作步数;如果不行,输出-1。 范围:2<=H,W<=5, 1<=A[i][j],B[i][j]<=1e9 思路:数据规模小,直接bfs搜索,如果范围再大点可以用双向bfs优化效率。需要用到哈希 阅读全文

posted @ 2024-03-08 12:27 chenfy27 阅读(26) 评论(0) 推荐(0) 编辑

abc284F 前缀+逆序+后缀
摘要:题面:给一个长度为2n的字符串T,问是否存在长度为n的字符串S,满足:T = S的前缀 + 整串S逆序 + S的后缀。 范围:n<=1e6 思路:字符串哈希,枚举S的起点逐一判断,如果前i个字符加后n-i个字符组成的长为n的字符串,正好和中间串的逆序相同,则为解。 #include <bits/st 阅读全文

posted @ 2024-03-08 12:19 chenfy27 阅读(10) 评论(0) 推荐(0) 编辑

abc238D AND and SUM
摘要:给定非负整数a和s,问是否存在一组非负整数(x,y),满足x&y=a,并且x+y=s? 0<=a,s<2^60 思路:异或是不进位加法,如果考虑进位,加上按位与的结果左移1位即可,也就是:x+y=(x^y)+((x&y)<<1),代入得x^y=s-2a,并且x&y=a,逐位分析可知,按位与的结果为1 阅读全文

posted @ 2024-03-07 23:42 chenfy27 阅读(11) 评论(0) 推荐(0) 编辑

abc304E 加一条边后是否仍为好图
摘要:题面:给一张n个点m条边的无向图,另外给出k组约束条件(x[i],y[i]),要求点x[i]不能与y[i]连通,满足全部k组条件的图称为好图。原图为好图,现在给出q组独立的询问,每组询问给定(u,v),问如果在u和v之间加一条边,是否为好图? 范围:n,m,k,q<=2e5 思路:先把图读进来,得到 阅读全文

posted @ 2024-03-07 21:53 chenfy27 阅读(3) 评论(0) 推荐(0) 编辑

abc309E 统计家族中已买保险的人数
摘要:题面:一个有n个成员的家族构成一棵树,1为树根。有m份保险,第i份保险为x[i]以及他的y[i]代以内的所有子孙购买。问总共有多少人有保险。 范围:1<=n,m<=3e5 分析:dfs遍历统计即可,y值需要向下传递,-1表示未买。 #include <bits/stdc++.h> using i64 阅读全文

posted @ 2024-03-07 21:26 chenfy27 阅读(6) 评论(0) 推荐(0) 编辑

abc295D 统计由SS构成的子串个数
摘要:题面:给出长为n的数字串,问它存在多少个子串是happy串?happy串指经重排后,可以写成一个串重复2次得到的形式,例如串11223344,重排后能得到12341234,为1234重复2次的结果,因此是happy串。 范围:1<=n<=5e5 分析:哈希判断是否相同,只需要判断各个数字出现的奇偶性 阅读全文

posted @ 2024-03-07 20:44 chenfy27 阅读(9) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示