
乱搞AC
文章平均质量分 68
这里收录了一些被自己乱搞AC的题。
做的时候没有看题解,看题解发现很简单,需要提升一下思维。
或者感觉乱搞的方法,可能以后不会再被想到,所以记录一下。
小衣同学
No Saturday , no Sunday , no holiday .
展开
-
Codeforces Round 969 (Div. 1) C. Eri and Expanded Sets(线段树维护差分数组gcd+双指针+尺取)
由于gcd只会缩成因子,所以对于所有原创 2024-09-23 03:23:24 · 390 阅读 · 0 评论 -
Codeforces Round 972 (Div. 2) D. Alter the GCD(二分+gcd性质)
不妨枚举l,注意到 gcd(a[l,r]),gcd(b[l,r]),gcd(a[r+1,n]),gcd(b[r+n]) 有一个不同的 r 只有 O(log) 个。求换完之后的gcd(a1,a2,...,an)+gcd(b1,b2,...,bn)的最大值。操作:选择区间[l,r],将a的[l,r]区间和b的[l,r]区间的数一一对应互换。每次给定n(n<=2e5)和两个长为n的数组a,b(1<=ai,bi<=1e9)当然枚举r也可以,这里是枚举r然后二分那log种的,复杂度O(nlog^3),原创 2024-09-17 01:32:49 · 938 阅读 · 1 评论 -
The 2024 ICPC Asia East Continent Online Contest (I) L. Bull Farm(性质题+有向图可达性/最短路)
也就是需要满足,t[i][1]到t[i][n]这一行,除去t[i][j]以外,其他n-1个数两两不重复。也就是最早前dis[j]个按钮时,i是可以访问j的,此时把无向边也当成有向边做,最多也就加3n条边。2. 恰好只有一组数出现了两次,如1 2 2 4 5,此时只能空t[i][2]/t[i][3],dp[i][j]表示初始局面空出来的是j槽,按了i按钮后,空出来的是dp[i][j]槽,所以,基于这个数据范围,很自然暴力的做法就是,离线询问,从前0个处理到前l个,原创 2024-09-17 01:11:51 · 832 阅读 · 0 评论 -
Educational Codeforces Round 168 (Rated for Div. 2) F. Chips on a Line(完全背包+斐波那契数列)
dp[i][j]表示当前选了i个数和为j的方案数,做个完全背包,将所有合法的y的状态求和即可。然后发现第i个数是fib[i],10个数,所以是不超过fib[10]的斐波那契数列。问题转换成,有x种数,其中第i种数是fib[i],在其中选n个数,假设他们的和是y。最少的斐波那契数可以dp预处理出来,当然贪心一步,直接从最大的转移递推出来也是对的。如果用最少个斐波那契数之和去表示y的时候,用了m个数,那么y就是合法的。可以把一个数都换成1和2,比如一个3可以换成1个1、1个2。原创 2024-08-12 03:48:41 · 320 阅读 · 0 评论 -
EPIC Institute of Technology Round August 2024 (Div. 1 + Div. 2) E. Cosmic Rays(单调栈)
如果(ai,bi)在栈中遇到相同的(aj,bi),就合并成一坨,新的这坨的是(ai+aj-now,bi)所以可以模拟这个最后一段加入的过程,维护一个单调栈,只有出现两面包夹的情况才合并。其实并不是一个难题,赛中d2花了太久时间,导致没时间写这个了,补一下写篇题解。而对于新来一个数(ai,bi)来说,如果前面的清完的时间比当前短就弹栈,那么就是维护一个单减栈,使得栈底的最大,栈底也就是最耗时的那个时间。对于栈顶来说,无法再使次栈顶弹掉,所以肯定是小于次栈顶的,对于每个时刻,输出栈底最耗时的即可。原创 2024-08-12 03:10:10 · 927 阅读 · 0 评论 -
hdu7458 旅行(启发式合并+树形dp)
v3往u上的mp上挂的时候,维护的是v3为子树根,存在一个点p的类型是x,p到v的路径是没用过的最大代价和,也就是③,再加上u下其他子树的dp值之和,也就是1+2,得到1+2+③。所以,mp[v][x]表示v为子树根,存在一个点p的类型是x,p到v的路径是没用过的最大代价和,用于辅助转移。于是,now[u]表示对mp[u]上所有点打的全局子树加标记,now[v]表示对mp[v]的。把v往u上挂的时候,v需要加上sum-dp[v],加上now[v],再减去now[u]原创 2024-07-28 11:47:02 · 608 阅读 · 0 评论 -
2023 Jiangsu Collegiate Programming Contest, National Invitational of CCPC (Hunan) E. LCM Plus(容斥原理)
比如需要减去的是gcd=2,lcm=y的方案,就等价于减去gcd=1,lcm=y/2的方案。dp[i][S]表示约数里当前选了i个数,当前所有质因子的状态有没有覆盖住最高幂次,由于lcm+gcd=x,有lcm/gcd+1=x/gcd,还有lcm/gcd>=1。显然如果gcd>1,让gcd和lcm同除以gcd即可,所以可以认为gcd=1,但是,这个只能限制住lcm的限制,不能限制住gcd=1,所以容斥。用gcd=1的,减去gcd>1的,枚举大于1的具体是几,枚举gcd,gcd一定是x的因子,原创 2024-06-20 18:50:49 · 595 阅读 · 0 评论 -
Codeforces Round 948 (Div. 2) E. Tensor(思维题-交互)
(6)否则,记las的两个父亲为f1、f2(也就是上图的点6、点7),如果能往f1后面续,就往f1后面续,否则往f2后面续。新来的点3,可以接在点4后,也可以接在点5后,也可以接在点6后,也可以接在点7后,因为在链中间的点后面续新的点,都可以看成是在交点后面续新的点,不影响两条链的性质。而此时应该是10->9->6->3->2,另一条链8->7->5->4->1。而这种情况的出现,说明前面有一个只询问了1次的点,也就是在点5下面的点4,可以发现,在点5形成Y字型,后接点4之后,新来的点3并没有续到点4上,原创 2024-05-29 20:10:39 · 1100 阅读 · 0 评论 -
Monoxer Programming Contest 2024(AtCoder Beginner Contest 345)E. Colorful Subsequence(线性dp)
dp[i][j][1]表示颜色和最大严格不同(也就是和dp[i][j][0]的颜色不同)时次大的(和,颜色)n(n<=2e5)个球在同一行,第i个球颜色是ci(ci<=n),值是vi(vi<=1e9)dp[i][j][2],其中dp[i][j][0]表示前i个删了j个后最大(和,颜色)但是仔细观察发现,实际前驱颜色只需要两种,即产生最大贡献的颜色,产生次大贡献的颜色。暴力是O(n*k*k)的,枚举当前颜色是什么,枚举上一个颜色是什么。同时需要保证转移后,次大的颜色仍然不能和最大的颜色相同。原创 2024-05-09 19:31:07 · 444 阅读 · 0 评论 -
AtCoder Beginner Contest 167 F. Bracket Sequencing(贪心 比较法 2022WF H题同款)
这个等价于a.se+b.fi>b.se+a.fi,即a.se-a.fi>b.se-b.fi。当min(a.fi,a.se+b.fi)>min(b.fi,b.se+a.fi),a在前。先选x>0 y>0的,选完之后选x<0 y>0的,先选x绝对值小的后大的,然后选x<0 y<0的,顺序不太显然,但是可以考虑比较法决定哪个在前,然后按这个排序一下就过了,其实打开min符号的话,可以发现是良序的,考虑第二个串和第三个串的顺序时,手玩发现,一个单独的串里的前缀最小值x,前缀和为y。前缀和-前缀最小值大的在前面。原创 2024-04-28 05:44:17 · 206 阅读 · 0 评论 -
AtCoder Regular Contest 176 C. Max Permutation(计数 分类讨论)
否则有两个点等于w,说明都可以,把其中一个填w,剩下一个当自由点。4. 从大到小考虑权值w,类似拓扑排序,把度为0的点加到队列里,初始没有被边覆盖的点是度为0的点,后续删掉max边之后且没有填值的点是度为0的点,当前度为0的点是自由点。3. 如果同一个权值w对应的边不少于2条,这些边应该有一个公共点i,否则无解,如果up[i]<w也无解,否则给这个点i赋初值w。从大到小考虑权值w的过程中,对于没有限制的,乘上当前自由点的个数,并令当前自由点数减1。检查所有权值w的边,对于当前边两个端点u,v。原创 2024-04-28 05:34:52 · 381 阅读 · 0 评论 -
AtCoder Beginner Contest 338 G. evall(枚举+递推 统计贡献)
比如1+23*45*56+7,mul[4]表示45*56的值,而mul[3]表示23*45*56的值。还需要处理一个形如2345*(3+34+345+3456)的东西,并加上2+23+234。sum[i]形如(3+34+345+3456)+(2+23+234+2345),sum2[i]形如2+23+234+2345*(3+34+345+3456),由4+45+456需要得到3+34+345+3456时,加上3333即可,不妨称3+34+345+3456这样的段,叫3456这个数的前缀贡献。原创 2024-02-04 02:10:03 · 800 阅读 · 0 评论 -
AtCoder Beginner Contest 337 G. Tree Inversion(dfs序+树状数组+树上差分 补写法)
定义f(u)为满足v原创 2024-01-22 01:47:04 · 627 阅读 · 0 评论 -
Codeforces Round 761 (Div. 2) D2. Too Many Impostors (hard version)(交互+构造 最小次数)
令a[1]=huai,a[2]=huai+1,a[3]=huai+2,a[4]=hao,a[5]=hao+1,a[6]=hao+2,而a[2]和a[3]两坏情况是翻转不过来的,说明a[2]和a[3]只能是一好一坏,那么a[1]一定是坏。b[1]询问2、3、5,b[2]询问2、3、6,b[3]询问3,5,6,b[4]询问2、5、6。注意到a[1]-a[3]的询问结果是0,说明a[2]和a[3]要么一好一坏,要么两坏,同理,a[5]和a[6]要么一好一坏,要么两好,即a[5]和a[6]至少有一个好。原创 2024-01-08 00:19:50 · 852 阅读 · 0 评论 -
洛谷P9388 [THUPC 2023 决赛] 先人类的人类选别(主席树+权值线段树)
操作的本质,相当于把[1,x]原来的数和[1,q]询问中出现的数放在一起,想求[1,x]的和,也就是求得总和和最小的q个值的和即可,无需关注具体位置。另两棵,B线段树维护冒泡序列的位置,C线段树维护权值线段树当前有哪些值。对于一个数x,记其左侧<=x的数的个数为y,那么其rank为y+1。考虑主要维护三棵树,一棵A线段树是原始序列中不在冒泡序列里的,线段树上每个位置的初始值是其左侧小于等于这个数的数的个数,查询的时候,按照值域,在两棵树叠在一起的树上一起跑即可。原创 2023-11-13 02:23:26 · 262 阅读 · 0 评论 -
Toyota Programming Contest 2023#7(AtCoder Beginner Contest 328)G. Cut and Reorder(状压dp)
于是就有,dp[S][i]表示(当前选了a序列前bit[S]个数),当前选择的b的集合是S,也就是B在新序列的位置和A的位置不再前后相邻,D在新序列的位置和A的位置不再前后相邻。当前a的最后一个数对应的b中的数选的是第i个时,二者只考虑这些数时完全相同的最小代价。也就是取一段连续的a的区间[l,r],往b当前的集合中,没取并且也连续的一段区间里放。选择a的第i个的时候,需要考虑a的第i-1个选的是什么,从而判断二者是否前后相邻。首先,考虑如果a的位置和b的位置在排列的位置上一一映射上了,原创 2023-11-13 01:58:41 · 237 阅读 · 0 评论 -
Avito Cool Challenge 2018 F. Tricky Interactor(交互 构造)
①如果b[i]一开始是1,那么翻之前为pre+suf,翻了[1,i]之后,总的1的个数为i-(pre+1)+suf-1。②如果b[i]一开始是0,那么翻之前为pre+suf,翻了[1,i]之后,总的1的个数为i-pre+suf。对于n>=2的情况,先问32次询问[2,n],这样[L,n]对应[2,n],[1,R]对应[1,n]计[1,i-1]的1的个数为pre,当前无法确定第i位是什么,但是已知[i,n]的个数为suf。那么,如果询问[1,i]的时候,[i+1,n]中01的个数相同,就无法区别是否翻转,原创 2023-11-12 17:20:03 · 683 阅读 · 0 评论 -
The 2020 ICPC Asia Yinchuan Regional Programming Contest M. Tower of the Sorcerer(数论分块+单点更新ST表优化dp)
第i个怪物有stri(1原创 2023-11-05 19:21:25 · 177 阅读 · 0 评论 -
KEYENCE Programming Contest 2023 Autumn(AtCoder Beginner Contest 325)G. offence(带删区间dp)
删除of子串和of子串后面紧跟着的i个字符,其中i∈[0,k],删完之后串后面的部分会接上来。那么先删完这一段,再用这个of,考虑[i+1,r]删完后最少剩几个字符,还可以减k。非连续是指,先删后面的一段of,再删前面的of,导致第二次删的在原串中不一定连续。3. 减k之后,一开始没考虑s[l]=='o'时dfs(l+1,r),③ 串最左侧是o,中间第i个字符是f,但o和f之间这一段可以被删完,1. 如果s[l]不为'o',舍弃当前字符,考虑[l+1,r]每次操作,你可以选择当前串中的一个of子串,原创 2023-10-23 13:33:06 · 153 阅读 · 0 评论 -
The 2020 ICPC Asia Yinchuan Regional Programming Contest D. Farm(LCT维护最小生成树/可撤销并查集)
因为dfs树只有2n条边,向下搜的时候link A&cut B,向上搜的时候cut A&link B。n(n<=1e5)个点,m(m<=5e5)条边,第i条边的代价是ci(1<=ci<=1e3)之前的断边时,是把要断的点splay到根,再切断两个son(w和u、w和v)的联系。q(0<=q<=16)个限制,第i个限制给出ui,vi,要求这两条边至少选一条,所以每次加(u,v)之前先找到树上最大的边,将代价减掉,再将当前边加上,所以新开一个点w,u连w,w连v,点权=边权。将其改为dfs,复杂度。原创 2023-09-24 22:03:37 · 276 阅读 · 0 评论 -
Educational Codeforces Round 146 (Rated for Div. 2) D. Balancing Weapons(差分+基础数论)
只有x-f[j]>0(减去一个f[j]后可能会导致d为0,=0就不合法了)且x-f[j]>=l,才是需要考虑x-f[j]的。有n(2<=n<=3e3)把枪,第i把枪有两个参数fi和di(1<=fi<=2e3,1<=di<=1e9)区间是从[pi,pi+k]逐步往下枚举的,最终枚举到[pi-k,pi],考虑区间的并,长度为2k。也就是正好可以落在[pi-k,pi+k]内的数,记为tmp,n-tmp就是需要修改的数的个数。对于n个长为k的区间,暴力统计是O(n*n*k)的,用差分干掉一个n,做到O(n*k)原创 2023-09-15 11:18:52 · 111 阅读 · 0 评论 -
Educational Codeforces Round 152 F. XOR Partition(boruvka完全图最小生成树/二分+trie+贪心+二分图判定)
1. 最大化最小值,首先考虑二分,二分答案v,将(a[p]^a[i])原创 2023-08-07 04:29:25 · 838 阅读 · 3 评论 -
Nebius Welcome Round (Div. 1 + Div. 2) E. Routing(状压dp/找到一个无向图简单环,使得所有点到环的距离不超过1)
Nebius Welcome Round (Div. 1 + Div. 2) E. Routing(状压dp/找到一个无向图简单环,使得所有点到环的距离不超过1)原创 2023-03-13 03:34:52 · 500 阅读 · 0 评论 -
AtCoder Beginner Contest 289 G. Shopping in AtCoder store(离线凸包/在线凸包上二分/在线动态开点李超树)
AtCoder Beginner Contest 289 G. Shopping in AtCoder store(离线凸包/在线凸包上二分/在线动态开点李超树)原创 2023-02-26 16:47:30 · 467 阅读 · 0 评论 -
NIKKEI Programming Contest 2019-2 C.Swaps(思维题/置换)
NIKKEI Programming Contest 2019-2 C.Swaps(思维题/置换)原创 2022-12-30 22:13:15 · 248 阅读 · 1 评论 -
2022 China Collegiate Programming Contest (CCPC) Guangzhou Onsite I. Infection(树形dp)
2022 China Collegiate Programming Contest (CCPC) Guangzhou Onsite I. Infection(树形dp)原创 2022-11-16 22:33:32 · 1698 阅读 · 0 评论 -
2022 China Collegiate Programming Contest (CCPC) Guangzhou Onsite M. XOR Sum(数位dp 数位背包)
The 2022 CCPC Guangzhou Onsite M. XOR Sum(数位dp 数位背包)原创 2022-11-14 01:50:36 · 2143 阅读 · 0 评论 -
The 2021 Sichuan Provincial Collegiate Programming Contest J.Ants(思维题/模拟)
题目n(1<=n<=1e6)只蚂蚁,在一根杆上,杆左端点0,右端点1e9+1,n只蚂蚁第i只的初始位置在ai,输入保证di=0代表当前向左爬,di=1代表当前向右爬左端点有一个柱子,被撞a(1<=a<=1e9)次后消失,被撞<=a次的时候都会把蚂蚁往反方向弹右端点有一个柱子,被撞b(1<=b<=1e9)次后消失,被撞<=b次的时候都会把蚂蚁往反方向弹思路来源乱搞AC题解L为左右端点距离,考虑时间每过2*L是一个循环,这时原创 2021-07-12 22:26:24 · 431 阅读 · 3 评论 -
Shopee Code League 2022 - Qualification Round P3.Connecting The Numbers(线段树/二分图判定, to be discussed)
题目t(t<=50)组样例,每次给定一个长度为2*n的序列,且每个1到n的数恰好出现两次,圆环上等距离分布着1到2*n这2*n个点,数值相同的点要么在环内连边,要么在环外连边,问给定的序列是否可以连边,使得边两两不交,如果可以输出yes,否则输出no自己的一点想法官方给出的题解,已经被找出了反例1 4 1 2 3 2 4 3 1 4队友请教了一下@泛白老哥,得出了一个主席树的做法自己又仔细想了想,感觉这个主席树,好像不太有必要所以,根据这个主席树,手撸了.原创 2022-03-20 01:39:23 · 851 阅读 · 1 评论 -
Codeforces Round #305 (Div. 2) C. Mike and Frog(思维题-扩展欧几里得 特判)
题目给一个模数m(2<=m<=1e6)开始有数1,记为h1,还有数2,记为h2(0<=h1,h2<m)每一天,数i,都会变成(xi*hi+yi)%m其中x1,x2,y1,y2是四个给出的系数,也满足在[0,m)之间现在有两个目标,a1和a2,也都在[0,m)之间想要某一天,h1变成a1,h2变成a2,问最少的天数是多少题目保证初始h1不等于a1,h2不等于a2思路来源乱搞AC题解首先找到h1第一次变成a1,h2第一次变成a2的天数,分别原创 2021-07-09 21:21:32 · 177 阅读 · 0 评论 -
Codeforces Round #721 (Div. 2) D. MEX Tree(思维题-树、mex性质)
题目t(t<=1e4)组样例,每次给出n(n<=2e5)个点,点号[0,n-1]的一棵树,对于每一个k从[0,n+1],求树上路径满足路径点集合的mex恰为k的无序点对数保证sumn<=2e5思路来源乱搞AC题解如果mex>=1,则这条路径一定要包含0如果mex>=2,则这条路径一定要包含0、1如果mex>=3,则这条路径一定要包含0、1、2则注意到mex=i能成立,必须[0,i-1]在一条链上,所以对0号点dfs,时刻维护以0原创 2021-07-04 14:23:59 · 404 阅读 · 0 评论 -
Samara Farewell Contest 2020 (XXI Open Cup, GP of Samara) M. Binary Search Tree(思维题-二叉搜索树的合法节点)
题目给一棵n(n<=5e5)个点的树,问是否存在节点x,使得以x为根时,树恰为二叉搜索树如果不存在输出-1,否则增序输出所有可能的节点x思路来源乱搞AC题解大概能树形dp搞吧,但是不会于是变成了一道一堆特判冲过去的题首先特判一些情况,①存在度数>=4的点的时候无解,②n<=2必有解(此时根的度为1)注意到,③答案可能的节点,一定是最小值和最大值之间的这条链上的节点,不然必有一个值的大小关系和最值是矛盾的,所以枚举这条链上的点u,u最多相邻三个原创 2021-07-04 12:56:30 · 508 阅读 · 0 评论 -
Codechef June Challenge 2021 Division 3 (Rated) G.Dual Distance(思维题-树/lca)
题目t(t<=8)组样例,每次给出一棵n(n<=1e5)个点的树,q(q<=1e5)组询问,每次给出一对(a,b),询问即对于n个点来说,每个点到点a和点b中两个点距离的较小值为该点的贡献,求贡献和sumn<=5e5,sumq<=5e5思路来源乱搞AC题解考虑a和b之间的所有点d,记c是ab路径上的中点,如果知道这些点d到a的距离和,如图,蓝色之和,如果知道这些点d到b的距离和,如图,粉色之和,如果知道这些点d到c的距离和,如图,原创 2021-07-04 13:49:27 · 518 阅读 · 1 评论 -
leetcode 5803. 最长公共子路径(k-最长公共子串问题)
题意题目即求k(k<=1e5)个串的最长公共子串的长度,字符集大小1e5,k个串的总长度不超过1e5思路来源乱搞AC题解大概是一个poj3294的后缀数组原题,首先将k个串用k-1个特殊字符(这里用1e5+1)连接到一起,注意不能用k个,不然会导致二分的答案长度+1,这样构造的新串长度2e5考虑二分答案长度x,忽略height<x的,将height>=x的尺取,然后,判断尺取的每一段,起始下标的并是否为k对于每个字符,bel[i]记录第i个字原创 2021-07-04 12:41:31 · 297 阅读 · 0 评论