自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

学的太少啦

学的太少啦

  • 博客(44)
  • 收藏
  • 关注

原创 E. Yet Another Array Counting Problem

想到了找最大值所在的位置分治,但一直不懂n*m

2022-11-15 11:47:59 316 1

原创 F. The Chocolate Spree

然后我们考虑最暴力的枚举边让树分成两棵子树分别求最大链,这样换根的时候我们需要对每个点维护3条最长链和2条最长交叉链。这里学习了一下使用set暴力维护若干个最大值的写法,不再需要手写if else了。然后我们加上几句话就可以写出2022ccpc桂林G了。dp2[u]=max(dp2[u],最长dp1[u]+次长dp1[u]-a[u]);dp1[u]:以u为根的子树中一端为u的最长单链。dp2[u]:以u为根的子树中最长的交叉链。:求树上两条不相交链的最大权值和。

2022-11-06 15:18:59 260

原创 D. Assumption is All You Need

事实上,第一次我们可以用4去依次交换 1 2 3,但这样A会变成1 2 3 4,后续无法操作。如果我们考虑依次交换最大的呢?这样我们又得到了一个能够通过所有样例的做法,事实上这是对的。:对于 5 4 3 2 1,假设5要到最后去,如果我们直接交换 5 1,会得到 1 4 3 2 5;如果依次交换最大元素,会得到 4 3 2 1 5,后续4的选择会被最大化。对于元素4:我们可以交换 1 2 3,这里我们直接交换3使得4对齐。:问能否通过交换A的逆序对把A序列变成B序列。对于元素3:这里只能交换1。

2022-10-24 21:49:33 357

原创 F. MEX vs MED

想到了是双指针,但不知道怎么才能有单调性。考虑升序枚举x,再用双指针维护mex=x的区间,这样区间只会不断扩大。如果当前mex=x,那么mex>med的区间长度最长为2x,双指针往pox[x]的那边扩展同时计算贡献即可。当x=n时,贡献为1。:求子区间mex>med的个数。

2022-10-18 15:58:29 397

原创 F. Multi-Colored Segments

分析:对于一条线段(i),另一条不同颜色的线段(j)的放置方法只有5种,对于r[j]>=l[i]的三条线段,最近距离为max(0,l[j]-r[i])。也就是对于右端点大于等于当前线段左端点的线段,要找到其中左端点最左的线段。实现上考虑按右端点降序来维护两个区间左端点最左的线段。题意:1~1e9的x轴上有2e5条不同颜色的线段,问每一条线段距离它最近的不同颜色的线段的距离。

2022-10-13 14:31:34 272

原创 G - Yet Another mod M

分析:如果存在这样的M,那么随机选取一个数选到众数的概率有1/2,两个就是1/4。设这两个数为x,y,有x%M=y%M。考虑枚举z的质因子看看是否满足条件,外面再枚举随机次数,复杂度为O(T*logA*N),但A在1e9级别,如果你不想使用PollardRho,那么只能根号分解z。理论上复杂度为O(T*sqrt(A)*N),显然会寄,但直觉上随机选取x,y的∑z不会太大,可以先在Custom Test上测一测。题意:有n个互不相同的数,问是否存在一个模数M使得a[i]%M后有一个区间绝对众数。

2022-10-10 17:43:21 161

原创 L. Collecting Diamonds

显然只有...AAABCCC...这种才能进行多次操作,且应尽量先删AC。又因为删B可以使得后面的选择更多,所以只剩下ABC时应删B。:有一个由A,B,C构成的串(下标从1开始)。:删B会使得B后面的字符奇偶性变化,删AC只会改变B的奇偶性。2.当B的下标为偶时,删除AC。1.当B的下标为奇时,删除B。

2022-10-07 02:20:24 310

原创 K. Jumping Monkey

分析:对于点权最大的一个点u,显然是所有合法跳法的终点。从大到小删点不好实现,考虑从小到大加点。每次找到与u相邻的点v所属联通块中点权最大的节点fv,令fa[fv]=u,再建一条u->fv的新边。建成新树后,以点权最大的点为根,每个点的深度即为答案。题意:给你一颗树,树上点权各不相同,猴子能够从u跳到v当且仅当v是u->v的最短路径上点权最大的点。对于起始点k∈[1,n],求猴子最多能够访问多少点。

2022-10-05 15:15:31 127

原创 2022河南省赛 J. Mex Tree

对于mex(S)=k的S,首先不能包含点权为k的节点u,且权值∈[0,k-1]的节点必须全都在以u为根的一棵子树当中,考虑换根。对于根节点u,记其每棵子树的最小值dp1[v],如果dp1[v]

2022-10-05 14:40:03 276

原创 D. Little Victor and Set(构造最小异或和)

考虑向 x+1 借一位。比如:l = 01010,a= (1

2022-08-29 20:55:23 232

原创 zcmu-5141: 环倍晋三 / Fast Bubble Sort(倍增)

传送门题意:给出一个长度为n的环,一个常数k和q次询问,每次跳跃会从第i个点跳到第(i+k) mod n + 1 个点(每次都是从第一个点开始跳)。每一个点都有一个权值,记为ai。每次询问给出一个m,求m次跳跃的权值和对1e9+7取模。分析:显然不能暴力模拟跳m次,考虑用倍增O(nlogm)预处理出从每个点开始跳2的幂次之后能获得的点权和,直接O(logm)查询即可。代码:#include<bits/stdc++.h>using namespace std;#define

2022-08-17 19:02:11 427

原创 J.Serval and Essay(tarjan求拓扑序)

给你一个图,可以选定任意的起点st(st入度可以不为0)。从u到达v后,u会被删除。u能够到达v当且仅当v的入度为1(到达v后v的入度为0),求最多可以到达多少个点。tarjan每次push_back(s[tp])就可以得到不缩点的反向拓扑序。tarjan求出拓扑序后枚举起点。............

2022-07-20 00:21:45 200

原创 C. Fishingprince Plays With Array

赛时没做出来掉大分。思路是对的,写又丑又长,不知道哪里错了。学习了一下别人的简短写法。

2022-06-26 14:49:55 169

原创 D. Guess The String

传送门:https://codeforces.com/contest/1697/problem/D题意:给定一个长为n的字符串(n

2022-06-14 00:28:06 236

原创 E - Lucky Numbers

传送门:E - Lucky Numbers题意:给你一个长为n-1的序列s,还有一个长为m的x序列,他们被称为幸运数字。定义一个长为n的序列a满足下列条件那么这是一个好序列:a[i]+a[i+1]=s[i]在一个好序列a中找到最大可能的幸运数字项。分析:m.........

2022-06-12 13:02:30 176

原创 D 小红的构造题

传送门:D 小红的构造题题意:构造一个长度不超过2e5的串,使得其中包含k个“red”子序列。(k

2022-06-11 15:30:18 859

原创 D - Together Square

传送门:D - Together Square题意:问有多少对(i,j)满足i

2022-06-05 19:18:00 379

原创 D. The Enchanted Forest

传送门:D. The Enchanted Forest题意:有一条长为n的线段,每个点上起始有a[i]个蘑菇。你可以选择起始点x。你有k分钟,每分钟以下事件将会发生:1.从点x走到点y(abs(y-x)

2022-06-04 13:56:08 267 2

原创 D. Max GEQ Sum

传送门:D. Max GEQ Sum题意:给你一个序列,问是否所有区间都满足 区间最大值>=区间和。分析:对于每个a[i],都往左右扩到第一个大于a[i]的位置记为l[i],r[i],那么在[l[i],r[i]]内a[i]是区间的最大值。此时如果在[l[i],r[i]]内最大的区间和都

2022-06-01 14:47:22 576

原创 E - Distance Sequence

传送门:E - Distance Sequence题意:求由duo

2022-05-31 18:21:07 182

原创 Educational Codeforces Round 129 D

传送门:D. Required Length题意:给你一个n和x,每次操作可以对x乘一个在x种出现过至少一次的数字,求最少的操作次数使得x到达n位。分析:一开始想每次都乘x种最大的数字,但第三个样例不对。原因是你可以乘一个不是最大的数a,使得x*a可以更快的得到9。考虑bfs。因为每次乘的数字不超过10,故最终得到的数字/x必然是2357的组合,时间复杂度为O(log2(1e19)*log3(1e19)*log5(1e19)*log7(1e19))。算出来在1.5e6左右。代码:#in

2022-05-24 16:38:04 79

原创 Codeforces Round #792 (Div. 1 + Div. 2) C D

传送门:C. Column SwappingD. TrapsC题意:给你一个n*m的矩阵,问你能否交换两列(可以同一列)使得所有行都是非递减的。分析:模拟代码:#include<bits/stdc++.h>using namespace std;#define int long longsigned main(){ int t; cin>>t; while(t--) { int f=0; .

2022-05-20 14:19:59 178

原创 三角果计数 & D 礼物

显然这样的三元组不可能存在于一条链上,所以此题的边权是没用的。那么我们只需计算所有三元组的数量再减去在一条链上的三元组数量即可。一条链上的三元组数量可以通过枚举中间的点来计算。先算根为1时的ans[1],计算时我们先算i

2022-03-30 22:10:56 717

原创 E - Wrapping Chocolate

传送门:E - Wrapping Chocolate题意:有n块巧克力,每块巧克力长为a[i],宽为b[i]。有m个盒子,每个盒子长为c[i],宽为d[i]。问能否把n块巧克力放入m个盒子中(每个盒子只能放一块,不能旋转)分析:首先有一个想法,对巧克力和盒子按长宽排序,再对第i个巧克力挑出所有c[i]>=a[i]的盒子,从中选择一个d[i]>=b[i]的盒子放入巧克力。正着考虑贪心并不能保证最优,我们考虑倒着放。假设我们已经处理好了第n块巧克力,现在来处理第n-1的巧克力。假设c[i

2022-03-26 23:08:50 689 3

原创 E - King Bombee

传送门:E - King Bombee题意:给你一个图,可以经过任意边k次,其中一个点x必须经过偶数次,求从起点s到终点t的方案数。分析:dp写不来,还是dfs舒服。代码:#include<bits/stdc++.h>using namespace std;#define int long longconst int mod=998244353;int n,m,k,s,t,x;vector<int>mp[2005];int dp[2005][2005

2022-03-21 15:20:04 413

原创 摘桃子(数学、前缀和、滑动窗口)

传送门:http://oj.daimayuan.top/course/10/problem/466题意:记pre为前缀和,求有多少对l,r满足(pre[r]-pre[l-1])%k=r-l+1(1<=l<=r<=n)。分析:显然是个前缀和取模+map计数的题。通过变形,原式=(pre[r]-r)%k=(pre[l-1]-(l-1))%k,我们设f[i]=pre[i]-i,原式=f[r]%k=f[l-1]%k。要注意r-l+1<k这个条件对区间长度有限制。我们不妨用l替换l

2022-03-05 20:44:09 149

原创 B. Fortune Telling & D - AND and SUM(位运算)

传送门:B. Fortune TellingD - AND and SUMB题意:有长度为n的一个数组a,Alice一开始有一个数d=x,Bob有一个数d=x+3,现在有两种按下标升序用上a数组的操作:1.d+=a2.d^=a还知道两人中只有一人可以通过一系列操作能把x变成y,问那个人是谁。分析:+和^对奇偶的贡献相同代码:#include<bits/stdc++.h>using namespace std;#define int long long.

2022-02-09 00:15:02 581

原创 Codeforces Round #769 (Div. 2) C D

传送门:C. Strange TestD. New Year ConcertC题意:跟你两个数a,b满足a<b,现在有三种操作:操作一:a++操作二:b++操作三:a|=b求使得a=b的最小操作次数。分析:首先看看操作三是什么:1.操作三会使得a变大(+0)。2.完成操作三之后,a>=b。此时要使得a=b,只能进行操作二。3.要使得操作次数最少,操作三最多使用一次。我们分类讨论:1.如果不用操作三:那么操作次数即为b-a。2.如果用操作三:

2022-02-01 23:26:13 1360

原创 D - Concatenate Subsequences

传送门:https://atcoder.jp/contests/arc134/tasks/arc134_d题意:给你一个长为2n的序列,可以在前n个数字中选出一条子序列,然后会附带给你i+n的后一半子序列(比如n为4,选了a1+a2+a4,那么会附带给你a5+a6+a8,最终序列就是a1+a2+a4+a5+a6+a8),要求该序列字典序最小。分析:细节题。显然可以不断地在[l=1,r=n]的区间中贪心的找到最小数字后更新l,那么第一次会得到a1+a5(第一小的数字子序列a1 和 对应的子序列a5

2022-02-01 20:25:54 829

原创 zcmu-5159: 图

传送门:zcmu-5159: 图分析:“给出的图中有且只有一个包括奇数个节点的环”,那么显然可以设环中的一个节点权值为x,跑一遍环推出x取值后再遍历图即可。发现最终要求的等式形如x=-x+a,答案即为x=a/2=(x+-x+a)/2。代码:#include<bits/stdc++.h>using namespace std;int a[100005];int vis1[100005];int vis2[100005];int vis3[100005];int f;

2022-01-29 17:51:52 748

原创 中位数切分 & D. Range and Partition

传送门:中位数切分D. Range and Partition题意:对于一个序列,要求把它切分成若干段,使得每一段中值域∈[x,y]的数的个数 大于 其他数的个数。求最多能切分成多少段。分析:设cnt1为∈[x,y]中的数的个数,设f[l,r]=cnt1-(n-cnt1)=2*cnt1-n,显然当f[l,r]>1时均可再分,故最终所有段的f[l,r]都为1,最终切成的段数即为2*cnt1-n。此时,若规定段数k,要求最小值域区间,双指针即可。代码:#include<

2022-01-28 19:43:16 721

原创 来点gcd & D. Not Adding(gcd)

传送门:来点gcdD. Not Adding题意:判能否选子集的gcd为x分析:也就是要判断多个x的倍数的gcd是否能取到x,g[i]表示i的倍数们能取得的gcd,若g[i]==i,则i能被gcd取到代码:#include<bits/stdc++.h>using namespace std;int a[1000005];int g[1000005];//i的倍数们能取得的gcd int main(){ int t; cin>>t; whi

2022-01-17 23:28:43 489

原创 2021 ccpc 威海 D. Period(字符串哈希 or next数组)

传送门题意:求将不同位置的一个字符修改为#后,新串中不同长度的前后缀相同的方案数分析:对于长度为n的串,#在pos位置时,只需对长度小于等于min(pos-1,n-pos)的前后缀查询即可q在1e6 故要先预处理主串看看有哪些合法长度的相同前后缀 再O(1)查询字符串哈希做法:#include<bits/stdc++.h>using namespace std;#define ull unsigned long longconst int maxn=1e6+5;...

2021-12-02 20:42:10 964

原创 浙江农林大学第二十一届程序设计竞赛校选拔赛A E G H

传送门E 俺拜俺拜 传送门题意:给定一个由ab组成的字符串,求区间长度大于等于x且ab个数相同的区间是否存在。输出一行 l 和 r,中间用空格隔开。如果存在多个满足条件的答案,请输出 r 最小的答案如果存在多个满足的答案有共同的 r ,则输出 l最小的答案。如果不存在满足条件的答案,输出 impossible分析:时间复杂度上显然只能O(n)扫一遍,考虑用map记录a-b的差值(记为cnt)所对应的位置如果到一个点时mp[cnt]已经赋过值了,看看这两点间的距离是否大于等于x,若是,直

2021-10-31 20:52:23 369

原创 妄想集合(势能线段树or暴力+并查集优化)

妄想集合 传送门题意:开始有n 个可重集合,开始时每一个集合中都有一个数,有m个操作。Quantlrx:往编号在 l∼r的每个集合中加入一个数x。 Asklr:询问能否从 l∼r的集合中取出三个数使得他们能作为边长组成一个三角形(即最小两个和要大于最大的)。分析:首先有一个结论:对于权值<=f(n)的集合,集合内至少有n+1个数字,才能找出三条边构成三角形。参考斐波那契数列1 2 3 5 8... 于是可以考虑线段树暴力修改。对于修改,集合元素个数>50就不必再...

2021-10-31 18:51:42 183

原创 Just a joke&寒冬信使(博弈)

Just a joke 传送门题意:给你n个节点m条边,两人博弈,最后不能操作的人输,有两种操作:第一种操作:删一条边第二种操作:删一个没有环的连通分量分析:第一种操作会使m-1,第二种操作会使n-x,m-(x-1)。每次操作都会使n+m减一个奇数。故n+m为奇数那么先手必胜。代码:#include<bits/stdc++.h>using namespace std;int main(){ int n,m; cin>>n>&gt

2021-10-30 15:05:33 234

原创 hdu 6547 Tree(树链剖分+势能线段树)

题意:树上每个节点都有一个值ai,现在有 2 种操作:1. 将一条链上的所有节点的值开根号向下取整;2. 求一条链上值的和;分析:区间开根号属于数值快速递降至稳定的函数,考虑暴力修改。共n个数,单点修改的时间复杂度为logn,对1e9开方至多只需5次,故总时间复杂度为O(nlogn*5)。代码:#include<bits/stdc++.h>using namespace std;#define int long long#define lson l,mid,rt<.

2021-10-25 22:40:35 125

原创 zcmu 5127: 数零(二分)

传送门题意:给定数字Q,找到最小的数字n使得n!末尾恰好有Q个0。分析:看以前的分解质因数的代码,发现了一个公式:一个素数p在n!里的个数 =n/p^1 + n/p^2+ n/p^3 + …想到这题就是求5在n!里的个数,于是打表,但1e8太多了,txt太大了打不开,只好作罢。公式求的是n!对应的0的个数,而题目求的是0的个数对应的n!,于是就想到了二分答案。另外一些细节写在了最后的注释里。参考代码:#include<bits/stdc++.h>using .

2021-08-22 21:46:52 230

原创 Just another board game(博弈)

题面:Just another board game题意:Roundgod和kimoyami在玩一个棋盘游戏,棋盘大小为n*m,每个格子有a[i][j]的价值,最开始的位置在(1,1),Roundgod与kimoyami轮流走(Roundgod先走),Roundgod只能横着走(走任意格),kimoyami只能竖着走(走任意格),两人最多走的步数为k(也可以在到某人走时不走而选择终止游戏),Roundgod想要使最终到达的格子的值最大,kimoyami想要使最终到达的格子的值最小,如果两个玩家都选择了最

2021-08-19 20:08:18 285

原创 King of Range(ST表+双指针/单调队列+双指针)

题目链接:https://ac.nowcoder.com/acm/contest/11256/K题意:n个数字,m次查询,每次给你一个k,输出区间极差大于k的区间个数分析:众所周知ST表可以做到O(nlogn)预处理出区间极值,O(1)回答每次询问。又因为区间极差是非递减的,故用尺取法确定最小的合法区间后ans+=n-i+1即可。代码:#include<bits/stdc++.h>using namespace std;#define ll long long.

2021-08-03 23:17:08 168

空空如也

空空如也

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

TA关注的人

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