- 博客(222)
- 收藏
- 关注
原创 高精度加减乘除运算
计算第i位,其实就是:a[i]-b[i]+t(+10),t存前一位是否借位,如果借位就-1,如果没有借位就为0。那么对于第i位的计算,其实是:a[i]+b[i]+t,a[i]存A的第i位上的数,b[i]存B上第i位上的数,t存前一位向第i位进位的数:如果没有进位就为0,如果进位就为1。对于第i位数,设t[i]为上一位遗留的数,那么这时候参与运算的数应该为t[i]*10+a[i]如果A>=B,那么结果就是A-B,如果A
2024-08-29 15:33:55
543
原创 D - Pedometer AtCoder Beginner Contest 367
设s[i]为前缀和数组,a[i]到a[j]的数的和是m的倍数--->(s[j]-s[i-1])%m=0-->s[i-1]%m=s[j]%m。设s[i]%m=k,那么我们用d[k]来记录从第一个位置到当前位置的所有满足s[i]%m=k的i的个数。那么我们对于当前位置i,可以算出满足s[i]%m=s[j]%m且j<i的个数,即d[s[i]%m]一个长度为n的数组a首尾相接,求满足a[i]~a[j]的和是m的倍数的[i,j]对数。那么就转换为求满足s[j-1]%m=s[i]%m的i和j的对数。
2024-08-24 14:21:43
259
原创 K - 区间和 2022年CCPC女生赛
那么由于多项式的模板x的幂次不能为负数,那么我们可以将B中的每个幂次都加上n,本来我们要找的系数是幂次>=1时x前的系数,加上n之后变成了幂次>=1+n时x前的系数。那么区间和为k的区间个数就是:所有当i-j=k情况下的i,j,s[ii]=i的s[ii]个数 * s[jj]=j的s[jj]个数的和。输出区间和排第k的权值,那么我们用b[i]记录权值为i的区间个数。中x前的系数就是当i-j=i时,所有的a[i] * a[j]的和。[l,r]的区间和k=s[r]-s[l-1]设s[r]=i,s[l-1]=j。
2023-10-10 17:50:27
532
原创 H - 提瓦特之旅 2022CCPC女生赛
一个有n个点,m条边的无向图,从u点到v点花费的时间和从v到u花费的时间都是C(u,v),并且当经过路上的第i个点的时候再加上额外花费的时间wi。wn-1:询问从1到t,走到第i个点额外花费的时间是wi的时候花费的最短时间。用bellman-Ford算法来预处理从1出发,经过i条边到j的最短距离,用d[i][j]表示。求从第1个点走到第t个点经过i条边的最短距离,那么经过了i条边额外的时间花费就是w1~wi。那么我们分别枚举从1到t这个点在经过i条边的条件下的最短路取最小。
2023-10-09 22:06:52
491
原创 I - 宠物对战 2022CCPC女生赛
那么我们就枚举前面满足在A或B字符串中的子串的最后一个字母的下标i,从i开始往后看,假设前面的子串在A字符串中,那么我们就枚举j从i+1开始往后的字符s[j]有无在B字符串中,如果在B字符串中并且s[i+1]~s[j]为B的子串,那么就用f[i][0]更新f[j][1]:f[j][1]=min(f[j][1],f[i][0]+1)A类字符串有n个,B类字符串有m个,给定一个字符串S,问S是否能被A类B类字符串交替表示,即ababa…查询某串字符串是否在集合中,就用tire树来存储和查询。
2023-10-09 21:18:17
424
1
原创 I Pa?sWorD(2023icpc网络预选赛)
那么我们分别需要枚举s[i]可以变成的字母a,当前的状态s1和s[i-1]可以变成的字母b,当前的状态s2.满足当a!那么我们用滚动数组优化,将i优化为i&1,并且在每次更新完i&1维之后清除掉i-1&1维的数据。每次到i的时候,我们先算出前面i-1个满足状态为s2的所有方案数,用sum[s2]数组记录。那么就用f[i][a][s1]来记录前i位已经确定,第i位字母是a,状态为s1的方案数。有一个长度为n的字符串,含有大写字母,小写字母,数字和’?'是不确定的字符,可以变成大写字母,小写字母或者数字。
2023-09-24 19:24:11
316
原创 河南省第十四届ICPC大学生程序设计竞赛 M二手物品回收
有n个物品需要出售,m个商家来买,需要出售k个物品,对于第i个物品有ai和bi,ai表示卖出的价格,bi表示愿意回收的商家。由于我们需要恰好出售物品k个,所以我们要初始化所有不能恰好出售的状态为-INF,f[i][0]表示在前i个里挑0个的最大价值,最大是0,那么赋值f[i][0]为0。对于第i个商家,枚举买的物品的个数kk,那么状态转移方程就是f[i][j]=max(f[i][j],f[i-1][j-kk]+w总-x[i])f[i][j]表示卖给前i个商家j个物品卖出的最大价值。
2023-09-05 19:41:19
391
原创 hdu Perfect square number
下一步需要算改之后含有x的区间和为平方数的区间个数。那么先枚举平方数的根号i(i<=300),算出平方数ii=i*i,再枚举j从1~ii用add[j]记录将x改为j之后区间和为平方数的区间数,那么add[j]=cnt[ii-j]那么我们需要枚举x,用枚举l(l<=x)和r (r>=x) 算出改之前含有x的区间个数op,并用cnt记录不含x之后区间和为sum的个数。将a[x]改之后的区间个数等于:改之前区间和为平方数的总区间个数-改之前的含有x的区间个数+改之后含有x的区间个数。
2023-08-03 18:34:52
206
原创 计算几何公式(点到直线距离,点到线段距离等)
/记录点的横纵坐标 struct Pot {//记录线段的起始点和终点 struct Line {//记录圆的圆心和半径 struct Circle {Pot p;double r;
2023-08-02 10:34:43
194
原创 hdu foreverlasting and fried-chicken
仔细观察上图,设第二行的那个点为x,最后一行的点为y,那么可以知道,如果x和y都和相同的所有点中取四个点分别和xy相连,并且x和y中任意一个点所连的除了四个共同点之外(如果和另一个点相连也得减去另一个点的个数)的点里随意选两个点,那么就可以构成这个子图。对于找x和y的相同点,我们可以用bitset来找,f[i][j]=1表示i和j之间有一条边,算都与x和y相连的点只用算f[i]&f[j]即可。在一个有n个点和m条边的图中找到形状是上图的子图,输出个数。
2023-07-31 19:29:29
173
原创 Simple Set Problem
那么我们可以将所有数进行从小到大排序,然后用双指针,当所指的区间内的数有n种集合时,用最左边的数减去最右边的数,找出所有满足区间内有n个集合的区间,将差值取最小就可以了。当区间符合条件时,会出现有多个数来自同一个集合的情况,那么我们只要保证最大值和最小值所在的集合分别选最大值和最小值就可以了,剩下的集合随便选一个在区间里的集合内的数即可。可以将题意转换为,挑的所有数的集合一共有n种,求挑的数的最大值最小值的差最小。
2023-07-31 14:43:37
231
原创 bitset详解
它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间,每八位占用一个字节,可用于状态压缩,n位的bitset执行一次运算时间复杂度为n/32//长度为n的默认都是0的串。
2023-07-25 10:49:48
1314
原创 费用报销 蓝桥杯
选:前提是j必须大于等于w[i];那么我们找到i左边第一个满足相差天数大于等于k的票数编号last,f[i][j]|=f[last][j-w[i]];f[i][j]表示在前i张票中,存在挑选满足条件的票使得能凑出总面额为j的方案。有n个票,每个票上有日期(X月X日),还有面额w。先将每个日期映射为是今年的第x天,用于判断相隔天数。不选:f[i][j]=f[i-1][j]1.任意两张票的天数相差>=k。2.这些面额的总值不超过m。先将票按照天数从小到大排序。
2023-06-05 20:32:46
4642
原创 A列车售货员难题(河南省第十四届ICPC大学生程序设计竞赛)
那么我们对这个步数进行优化,每次走到下一个位置必须满足下一个位置中包含已经走过的前面的数中没有的数,那么m总共100个,对于每个起点最多跳100次,那么分别以1~n为起点跳100次,找到所有不同种类数,时间复杂度就是2e7,不会超时。记录连续的段的不同数的不同种类总数,当我们走到i的时候,假设已有x,y这两个数,那么我们再走到i+1段,如果i+1段里没有包含除了x,y以外的其他的数,那么说明这一段和上一段的种类相同。
2023-05-24 20:44:49
444
原创 D. Running Miles
有一个长度为n的数组,区间[l,r]的值(区间长度大于等于3)为最大三个数的和减去区间长度+1,即:对于[l,r],ans=a[x]+a[y]+a[z]-(r-l)(l<=x,y,z<=r)那么我们对于每个中间的值a[z],最大值就是他左边的a[i]+i的最大值+他右边的a[i]-i的最大值,对于每个a[z]取最大值即可。我们要求的是a[x]+a[y]+a[z]-(r-l)就进一步转换为a[l]+a[r]+a[z]-(r-l)变化一下就是a[l]+l+a[z]+a[r]-r。求这个数组的所有区间的最大值。
2023-05-11 20:42:46
180
原创 Problem E. 矩阵游戏 (2023年ccpc河南省赛)
从[1,1]走到[n,m],每次只能向下走或者向下走。的时候可以将他变为1从而得到一分,或者不变,求所有从[1,1]走到[n,m]的路径的得分的最大值。改:f[i][j][k]=max(f[i-1][j][k-1]+1,f[i][j-1][k-1]+1)在转移的时候只用到了i和i-1层,那么我们就将i这一维开两个,在转移的时候在两维之间相互转移就可以了。不改:f[i][j][k]=max(f[i-1][j][k],f[i][j-1][k])f[i][j][k]表示走到[i,j]恰好有k个?
2023-05-08 23:52:44
1527
2
原创 HDU 6695 Welcome Party
假设[1,i-1]中的数最大值是my,如果my大于等于a[i].x,那么选择比my小的y最大值还是my,选择比my大的数a[i].x和my的差值会越来越大,所以当my比a[i].x大的时候最小值就是my-a[i].x。当my比a[i].x小的时候,我们就需要在[i+1,n]之间选择最接近a[i].x的y值,即找一个比a[i].x大的最小值,找一个比a[i].x小的最大值,取他们之间差值最小的就可以了。有n个人,每个人有一个x属性有一个y属性,每个人选择其中的一个属性,并且每个人都需要选。
2023-04-26 11:33:51
513
原创 HDU 5927 Auxiliary Set
如果变不了重要结点,说明u的有重要点的儿子结点数量要么是0要么是1,如果是0,那么u的父节点的有重要儿子结点的数量就需要-1,因为每次询问独立,那么我们需要将减掉的点给记录一下,当这次询问完毕时再复原加上。从最深的结点u开始遍历,如果u的有重要点的儿子结点数量超过两个,那么u就可以变成重要结点,ans++那么我们就需要检查一下不重要的点,对于每个不重要的点看看他是不是两个重要的点的最近共同祖先。那么我们可以先预处理好每个结点的儿子结点的个数,每个点的父节点和每个点的深度。2.是两个重要的点的最近共同祖先。
2023-04-25 18:36:13
438
原创 HDU-5929 Basic Data Structure
如果有0,且0前面没有数,即 q的第一个元素是r,那么0和前面的结果就是0,总的结果就是直接看1的个数-1的奇偶,即r-l的奇偶;如果没有0就看1个数的奇偶,如果有0:如果0前面没有数,即q.back==l,那么就是1的个数-1个数的奇偶;只有1和1的结果是0,0和任意数结果都是1,那么我们可以从栈底到上看,碰到的第一个0,如果0的上面有数的话,他们的结果是1,如果没有数的话,那么结果是0。是倒序的时候,l–,a[l]=x,x如果是0的话,就在q的前面加上l。3、REVERSE 将整个栈翻转。
2023-04-24 15:53:26
357
原创 3042: 子序列(2023郑州轻工业大学校赛
1.在之前序列中相同的数为0对的序列的基础上,再选一对相同的x(在y个位置里选两个),即dp[0] *1.在之前相同数的对数为1的序列的基础上,再选一对相同的x(在y个位置里选两个),即dp[1] *2.在之前序列中相同的数为1对的序列的基础上,再选一个x,或者不选x,即dp[1] *(y+1)2.在之前序列中相同的数为两对的序列的基础上,再选一个x,或者不选,即dp[2] *(y+1)2.在之前相同数对数为2的序列的基础上选一对相同的x(在y个位置里选两个),即dp[2] *设数x的不同位置有y个。
2023-04-03 22:30:17
299
原创 3040: 售卖车票(2023郑州轻工业大学校赛
到最后以i为起点选择的区间的个数都小于等于k,满足了题意之后我们再看下一个区间,同时把我们当前选择的区间中以i为右边界的区间都给删掉,因为i之前的区间都满足了题意。我们对于每个以i为起点的区间,先把所有区间都加进去,s记录当前选择的区间的个数,如果s>k的话,我们就将右边界最大的区间给去掉。想让区间数尽可能的多,那么我们对于起点相同的所有区间,肯定优先选择右边界小的区间,这样我们后面才能放更多的区间。求这段公路的每段的压力都小于k,能选择的最多的区间的个数。
2023-04-03 20:19:54
99
原创 3036: 莫比乌斯最大值isUsefulAlgorithm(2023郑州轻工业大学校赛
因为对于一个回答,如果他的长度长,可以回答长度长的问题和长度短的问题,如果他的长度短的话就只能回答长度短的问题,所以我们优先让他回答没有回答过的长度最长的问题。对于map的每次询问都是插入,如果对于每出现过的map,需要先判断是否出现过载判断值,可以节省时间防止tle。那么我们对于一个回答,让他贪心的回答出现过的前缀最长的问题。用umap来记录一个问题是否出现过,以及是否被回答过。对于每个回答,他的每个前缀都可能是一个出现过的问题。,只能回答在这句话之前提问的问题。那么求最多能回答几个不同的问题。
2023-04-03 17:03:50
357
原创 3036: 莫比乌斯最大值isUsefulAlgorithm(2023郑州轻工业大学校赛
题意:a数组有n个数,b数组有n个数从a,b两个数组中任选两个数a[i],b[j],算出值a[i] * b[j] * gcd(a[i],b[j])求这个值的最大值。
2023-04-03 14:37:27
316
原创 2264: sequence
有一个长为n的数组a和一个长为m的数组b,询问在A中有多少段连续的长为m的子序列满足A[k],[Ak+1],…,A[k+m-1]使得对于任意1
2023-03-29 19:00:37
118
原创 背包好题(原题链接+题解
当f[i][k]=0的时候的状态转移方程是:dp[i][j][pp]=max(dp[i][j][pp],dp[i-1][j-k][pp-1]+f[i][k]);那么第i个杯子就剩下wi-x的水,第j个杯子就有wj+x/2的水。当f[i][k]>=60的时候状态转移方程是:dp[i][j][pp]=max(dp[i][j][pp],dp[i-1][j-k][pp]+f[i][k]);转移方程:f1[i][j]=max(f1[i-1][j],f1[i-1][j-v[i]]+w[i])
2023-03-29 17:39:17
385
原创 i love exam
当f[i][k]=0的时候的状态转移方程是:dp[i][j][pp]=max(dp[i][j][pp],dp[i-1][j-k][pp-1]+f[i][k]);当f[i][k]>=60的时候状态转移方程是:dp[i][j][pp]=max(dp[i][j][pp],dp[i-1][j-k][pp]+f[i][k]);对于第i本复习资料,名称是s[i],研究的时间是y[i],可以在这门学科上加x[i]的分(每科的上限是100,每本资料只能用一次)有n场考试,还有t天开学。
2023-03-29 17:35:57
819
原创 小朋友崇拜圈
原题链接:https://www.lanqiao.cn/problems/182/learning/?记录当前遍历的小朋友的编号和圈头小朋友的编号和当前遍历到的人数。如果当前小朋友的崇拜对象是圈头小朋友,那么说明从圈头小朋友到当前小朋友组成一个圈,那么就找到了一个圈记录一下大小。有n个小朋友,每个小朋友都有一个崇拜的人,也可以是自己。
2023-03-29 17:35:15
51
原创 龙龙送外卖
有一个树状的地图,需要从根节点开始走,有m个点依次出现,求每个点出现之后遍历所有出现过的点的最短距离(不用回到根节点)。当用回到根节点的时候,距离是走过的所有路径的两倍,那么不用回到原点就是减去离原点最远的点到原点的距离。
2023-03-29 17:34:43
82
原创 2263: neighbor
最小值:先将主视图填上,因为对于行列高度相等的数可以放在一个格子上就能满足,那么我们就遍历左视图,如果这个格子在主视图没有出现过或者在左视图中出现的次数大于在主视图中出现的次数,那么我们就将他加上。最大值:对于每个格子来说,取左视图和主视图的最小值,那么就保证了每个格子都被填上并且符合主视图和左视图。有一个n*m的矩阵,给出主视图和左视图的高度,求这个矩阵的总高度的最大值和最小值。
2023-03-29 17:32:55
64
原创 背包总结(01,完全,多重,分组,二维,混合,方案数,具体方案)
如果要求背包装满的话,那我们设的状态是:f[i][j]表示在前i个物品里恰好选择了体积为j的物品获得的最大价值,那么我们初始化的时候f[0][0]表示在前0个物品选体积恰好为0的最大价值,那么是0,但是f[0][i]表示在前0个物品中选体积恰好为i的最大价值,无解,所以1~n的f[0][i]的值是负无穷,然后我们再正常按01和完全背包做,当最后f[m]是负无穷的话说明没有能正好装满的方案,如果不是那就是最大价值。第i个气缸中有容量为v1[i]的氧气和v2[i]的氮气,他的重量是w[i]。
2023-03-20 20:45:36
580
原创 【计算几何】叉积
是凹进去的,所以我们可以先按顺序算叉积相加(不取绝对值),最后的结果取绝对值,最后的结果就是面积(如下图,绿色的面积是正的,红色的面积是负的,相加取绝对值就是最后的面积)两个向量的乘积,设有p1,p2两个坐标,p1表示从(0,0)点出发,到(x1,y1)的坐标,p2表示从(0,0)点出发,到(x2,y2)的坐标。那么我们可以发现,依次求叉积相加的结果的绝对值依旧等于三角形的面积(红色面积是负数,绿色面积是正数)当从p2走到p3的时候我们是往左,p3走到p4的时候往左,但是在p4走到p1的时候是往右,而。
2023-01-25 20:39:50
2363
原创 C. Yet Another Tournament
那么我们就看能不能赢至少赢x局的人(下标为x+1),假设我们没有赢他,我们的名次是n-x+1,如果我们赢了他,他的局数就是x,我们的局数也是x,我们的名次就可以再提升一名(和他并列),那么我们就想办法看看能不能赢下标为x+1的人。因为我们最多赢x局,所以我们不可能比至少赢x+1局的人(下标为x+2)的名次高,也不可能比至少赢x-1 的人(下标为x)的名次低,因为他最多赢x局。如果我们没有赢x+1的人,那么我们就看能不能把在之前赢过的人里面挑一个人把他换成x+1,根据贪心我们肯定选赢过的a最大的人。
2023-01-09 17:53:24
468
1
原创 C. Koxia and Number Theory
所以,其实就是对所有的2~n/2的质数p,看看每个ai%p的值是否在0~p-1的范围上全都>=2,如果是的话就是no,不是就是yes。所以我们对于每个质因数p,都能找到一个%p的个数是1的数,这就相当于找到了一个形如x%pi=yi的等式,那么最后一定有解。那么其实我们列举每个质因数p,然后判断0~p-1范围内的数被a数组%p之后的数的个数是不是都>=2。如果不是上面的情况,即对于所有p,都有一个a数组%p的值的个数
2023-01-08 15:43:45
485
原创 P1220 关路灯(区间dp)
初始化:求最小,先全初始化f为正无穷,在起点的状态是0,即f[c][c][1]=f[c][c][0]=0;1是i->j-1即f[i][j-1][1],那状态转移就是f[i][j-1][1]+耗损的电量。2是j-1->i即f[i][j-1][0],那状态转移就是f[i][j-1][0]+损耗的电量。f[i][j][0]表示区间i~j的灯关了之后,站在i所消耗的最小时间。f[i][j][1]表示区间i~j的灯关了之后,站在j所消耗的最小时间。那么从j-1走到j就是x[j]-x[j-1]
2022-12-22 19:09:00
530
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人