自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2023“钉耙编程”中国大学生算法设计超级联赛(7)

每次交换2的次幂长度时,长度为2,奇偶性改变,4的时候,逆序对数由x转化为4*(4-1)/2=6-x,因为6是偶数,故奇偶性不变,又因为4之后长度皆为2的次幂,每次n*(n-1)/2都是偶数,故只有2的时候才会改变。有这样一种策略,先手进入非ST->ED路径上的子树,有了ST的阻隔,先手会选择这些路径中最长的,同样因为ED不能进入ST的路径,所以只能选择一条最长的路径,这条路径可以是ED内部,也可以是先走到ST-ED路径某点,再进入其内部。由于有了虚线路径的阻隔,这些每个点的最长路径都是独立的,互不影响。

2023-08-16 22:54:23 410

原创 2023“钉耙编程”中国大学生算法设计超级联赛(6)

对于横跨的,显然不能n*n暴力枚举,考虑到,横跨的关系是可以顺承的,故从左到右推,每次加入当前到右边全部的,一旦i到了i+1,就要除掉左边之前的影响,这些无用的区间,画图可以发现,是以i-1为右端点的。将a,b,c替代为若干大质数,令a=1e9+7,b=998244353 ,c=-a-b,这样,一旦三者数目相等,必然和为0,在个数不超过1e5的情况下,一旦三者和为0, 也必定是三者数目相等。当统计答案的时候,从大到小跳,每次跳的话,合并都应该将当前步数作为合并的右边,将之前的作为合并的左边。

2023-08-16 15:31:13 361

原创 2023“钉耙编程”中国大学生算法设计超级联赛(5)

也就是说,两条边的环,工作时间为w1+w2,三条边的w1

2023-08-13 22:47:02 349

原创 2023牛客暑期多校训练营7

而对于剩余没能确定的,也就是字典序产生的由来。继续从高到低遍历每一位,当前位置i若没有确定,如果位置i之前(所有小于位置i)的有x的没有确定的,那么当前填0的贡献为(1

2023-08-12 20:46:56 322

原创 2023牛客暑期多校训练营6

又因为当前边权一定是最大值,故左右集合内部贡献我们已经算出,只需要再在合并的时候,算上这条边新来的贡献即可。当分成k段每一段都是2的倍数时,首先[L,R]的前缀和必须也是2的倍数,即R和L-1的前缀和奇偶性相同。从R开始,一旦有一个跟其前缀和奇偶性相同的L,就分一段,直到L-1,故只需要看L-1到R-1有多少和R奇偶性相同的前缀和,要求有k-1个就行。这样是一个n^3的,但是我们对u,u1,共同选k这一函数打表发现,这是一个完美的可以递推的函数。找规律,推式子,开int128数学题。

2023-08-12 11:35:58 189

原创 2023牛客暑期多校训练营5

维护一个对顶堆,大根堆存的是,尚未加入的负数,小跟堆存的是已经使用的负数的相反数。对于每一位进行考虑,遍历1到n,当前二进制pos位置,他的贡献为(1

2023-08-11 10:26:19 233

原创 2023牛客暑期多校训练营4

而当前n选择的a,b值,可以暴力枚举n的a值,检验这个a*b的长方形构造出的正方形个数是否满足2*cnt+2<=50.即我们假定蓝色已经递归构造成功。我们只需要获得当前[L,R]区间的(A[L]+A[R]) /2,如果(A[L]+A[R])恰好整除2,则全部大于等于这个值的都投给右侧,如果不能整除2,即为某.5,同样全部大于这个值的都投给右侧,故采用upper_bound,再pos--,即获得投给左侧的全部。首先,当n包含某个因子的时候,如果这一因子小于等于7,大于1,就可以合并每个因子*因子的正方形。

2023-08-07 23:35:03 147

原创 2023“钉耙编程”中国大学生算法设计超级联赛(4)

考虑对每个环,记录包含[1,1],[1,2],[1,3]...[1,n]的全部环,对于一个包含[1,k]的环,要想不重复的记录,需要以k为起点,这样,包含[1,2]的以2为起点的环,和包含[1,3]以3为起点的环。各种,而[4,6]的环,在[1,6]的时候,已经被以6为起点的记录。最终会变成一个n<=3,m<=3的情况。当第i-1次0在自己的位置上时,p[i-1] * ( 1 + (n-1)^2 ) / ( n^2 ),即n^2种交换,只有[0,0]交换,和没有0的交换才能保证0仍然在原位置不懂。

2023-08-05 15:09:58 172

原创 2023“钉耙编程”中国大学生算法设计超级联赛(3)

首先这一变换具有一个性质,即除了原始的a,b的大小关系不定外,处于“变化”过程中的a,b是有确定的大小关系的,且可以根据这一大小关系直接推出上一步的变换。利用这一性质,考虑贪心做法,每次我们获取当前a,b,c最大极差,将造成这一最大极差两个数,小的那个,替换为“替代方案”,也就缩小的极差。其中特别注意的是j的下限,它等于前i个数字由高到低放置的时候的结尾数字。这样排序,遇到AB+0时计算当前已知的个数,遇到AB是计算已知个数,二者相减,即可得出答案,也就是大于等于AB,小于AB+0的,减去严格小于AB的。

2023-08-02 13:40:10 350

原创 2023牛客暑期多校训练营3

初始时,dp[0][0][0]=dp[0][0][1]=1,答案直接加上拿了一张牌的方案数,ans+=fac[2n],值得注意的时,这里的“拿了一张牌”指的是全部至少拿了一张牌的方案数,也把拿了三张,两张的“第一张”都包含在内了,故采用方案数可以巧妙的把方案数的累加变成总个数的累加。而DAG上的支配树,从1号点开始拓扑排序,每当遇到度数为0的点,求这些点的LCA,LCA指在支配树上的LCA,然后将这一LCA改为这一点的直系父亲,直系父亲指的也是支配树上的直系父亲。边权为1,BFS得出的正确dis为最短路。

2023-07-30 20:57:31 118

原创 2023“钉耙编程”中国大学生算法设计超级联赛(1)补题

dp[L][R][0][0]由两种情况转移,暴力枚举mid点分为左右区间是一种,还有一种是,由当前[L,R]区间任意位置的任意种类任意等级的dp[L][R][x][k] 消去最后一个(x,k)转移而来。值得注意的是,本题的ai范围耐人寻味。自己不选,儿子至少选一个的时候,先全部由dp[son][0][1]转移,再用一个dp[son][1][0/1]冲抵掉一个dp[son][0][1]即可。自己选,儿子至少选一个的时候,全部用dp[son][0][0/1]转移后,再用dp[son][1][0/1]替换即可。

2023-07-28 10:02:03 244

原创 “范式杯”2023牛客暑期多校训练营1 补题

我们求交集,只需要分为两类查询,一是上端点在本次上端点之内的,我们查询其长度最大值。则当前胜一场的,是1减去全败的概率=1-(1/2)^r。直接遍历m次肯定超时,但是,考虑到相同cnt对应r是有一个很大区间的,且指数增长。n>1&&m>1时,假设W必胜,则W第一次消除时一定不会选择(n,m),所以他第一次消除时一定会剩下一部分。考虑到,最短路<k的点,如果有引出的边,在这些边上随便加,对任何旧点最短路都没要任何影响,故考虑能加就加。败一场后胜一场,钱先-1后+2,总数+1,之后投标为1。

2023-07-25 10:42:20 120

原创 2023牛客暑期多校训练营2 补题

考虑将x开平方,再平方,如果恰好能够得出最好,如果不能得出,必须对要平方的数字加1,且只加1更接近这一前缀。但这一加1操作,会导致同等长度的前缀大于x,而考虑到+1操作带来的额外影响会随着x*10不断变小,故对x不停的*10,算出x为这些数字前缀时,y是否符合。也就是0001->0000->(-1)->(15)->1111->(14)->1110->翻转-0001。当前不移动时,因为不能重叠,所以考虑dp[i-1][0],dp[i-1][1]转移。左边加1,取反后,右边减的变成加, 原数加2。

2023-07-25 09:28:22 204

原创 2023杭电 “钉耙编程”中国大学生算法设计超级联赛(2)补题

首先1段数应该是大于等于0段数的,当k>=cnt0时,显然变1不会更优,当k

2023-07-24 22:36:06 161

原创 2022 China Collegiate Programming Contest (CCPC) Weihai Site 2022CCPC威海(7/13)补题

二分龙蛋数量,把全部龙蛋需要的各个材料数都加进大根堆,我们现在就需要把他们都变成0.考虑大的怼大的,当前材料靠当前bi消灭的时候,如果能整除,那就直接正常分类讨论就行了。因为当前堆顶的一定是最大的,而当前bi是一定要用的,无论用在哪个材料,都只是消灭掉一个而已。如果需要多个bi,但是不能整除的话,多出来的那一部分材料不要占用当前bi一次,放进堆里,这样后面小的bi可以冲抵掉他。当xiyi有0的时候,考虑从小到大消去,把yi为0的作为每段线段的开头,之后x值连续递增1的加入次线段,代表了这段线段是受限线段。

2023-06-08 20:51:52 382

原创 The 2021 ICPC Asia Shanghai Regional Programming Contest 2021上海 (8/13)补题

若k>=w-a[x]意味着我们可以到达y,当k>=w-a[x]-a[y],意味着我们可以通过x,y集合和a,b集合的一条边到达a,b中的某一个,然而,我们重构树连边过程中,边权从小到大,在合并两个虚点的时候,已经合并了虚点管辖的单点,意味着k>=w-a[x]-a[y]的时候,一定能到达a,b二者。每次合并两个单点x,y,就设置一个虚点1,权值为a[x]+a[y].边权分别是w-a[x],w-a[y],w为x,y之间边权。又有两个单点a,b, 设置虚点2,权值为a[a]+a[b],边权等等,

2023-06-07 23:33:27 528

原创 2020-2021 Winter Petrozavodsk Camp, UPC contest - 补题(6/12) Petrozavodsk 冬令营

无向图找桥的时候,我们在tarjan的基础上,加了一个fa,也就是之前访问的点,那么这其实就可以借鉴树求直径的套路,每个点设置dp值代表由这个点出发的两条最长链。这一点用数学知识直接运算。再进行m-1次列合并,连边m-1个(此时每一列的行联通块只剩下1个),(n-1)*m+m-1等于n*m-1。另外,特判n=1,n=2,n=2的时候,2号人一定不能赢,否则2号人赢的一定是1号,不满足题意。加入V边的时候,如合并2,5列,我们发现,原来行合并的两个点,即(3,2) (5,2)两个红点。因为这是可以传递的。

2023-06-06 19:33:20 370

原创 The 2021 China Collegiate Programming Contest (Harbin)-2021 CCPC 哈尔滨(7/13)

比如4号节点管辖了5个叶子,2个红色,2个绿色,一个蓝色,我们当前自然是选择红绿都行,那么就都放进4号点的multiset,其dp值就代表4号点选择红或者绿时的dp值,也就是说,我们获得了dp值的共享。1 1 0 0 0 1 1 (右小) 这种,我们删除,1,2,4,8,16,其中4,8,16全部被32吸收,他会吐出来32-4-8-16=4 ,也就是右侧第一个0,这样我们发现,这个过程就是向高位借1的。,注意当前位置不要删除这个借来的1,然后继续往前推,之前借到的1,也会被依次删除。

2023-06-05 21:45:22 315

原创 2022 China Collegiate Programming Contest (CCPC) Guilin Site 2022CCPC 桂林 (7/13)

严格按照小指向大的方式连边,获取每个位置最小值的时候,拓扑序上每次取max。贪心的想,我们一定是把当前右端点最小的给赋值,因为更大一些的可以在i后面被赋到。手推不难发现,只要是进行一次翻转操作,之后无论进行任何操作,得到的结果都是一样的。我们现在需要获取的是,翻转操作之前数组的各项情况,再把他当成一个新的数组来求最终的结果。这一过程可以合并一个点连接的两条链,也可以取更深一层搜索获得的链,二者取最大值即可。一种是有交点,画图分析得,只有一个焦点的时候最优,进一步转化为一个点连接的四条链最大值。

2023-05-31 20:34:35 239 1

原创 The 2021 ICPC Asia Nanjing Regional Contest (XXII Open Cup, Grand Prix of Nanjing) -2021 南京补题(7/13)

再在末尾加不同的一个数字,发现加的数字x=max(a[1]...a[i-1])的时候,ans[i]=ans[i-1], max(a[1]....a[i-1])的时候,是ans[i]=ans[i-1]+2+(i-1-pos2+1) pos2指前面最大值第二次出现的位置与i-1的位置。枚举t=3的节点,当该节点是最大的dp0+val-dp1时,选择次大的,否则选择最大的。

2023-05-31 12:40:01 414

原创 2022CCPC 绵阳 2022 China Collegiate Programming Contest (CCPC) Mianyang Onsite 补题(6/13)

但本题并不是从前往后推,我们设置dp[i][j][k]为 包括i这局在内,A选了j,B选了k的收益,当前的dp值完全由后面的状态转移而来,写for循环dp的话,不是太好写,改写为记忆化,nown,nowa,nowb代表第几轮,A选了几个,B选了几个。贪心的想,我们尽可能的把全部蝴蝶汇聚的一个点,当然不可能是1这个点,而是1的儿子们。nown为奇数的时候,A开始选,前nown-1的状态是,A选了nowa个,BAN了(nown/2)-nowa个,B选了nowb个,BAN了(nown/2)-nowb个。

2023-05-27 15:47:07 726 1

原创 The 2022 ICPC Asia Nanjing Regional Contest - 2022南京补题记录 ABDEGIJM (8/13)

相反,先匹配本集合的边,能够匹配完全时,x可以返回给他的原集合,不能完全匹配时,也可以调用x进行匹配。二分最终答案,[0,1e18],难在check函数怎样去写,首先一个值满足第k大必定是大于等于他的数字个数大于等于k,数列本身存在的,我们累加,对于不存在的,我们每一个多考虑把他们变成>=x的,x为二分答案,其对应的等差序列左端点是一个区间,我们对这个区间进行差分+1,代表,在这些位置放置等差数列首项会有1的收入,由于我们必须放置且只能放置一个等差数列,那么就枚举每个位置放置的贡献取最大即可。

2023-05-22 23:55:36 1512

原创 2022-ICPC-杭州补题 (7/13) ACDFGKM

本题是物体装包问题,一个物体装入现有包的时候,如果能完全装下,就不能只装一部分,否则,在装入一部分可以的时候,要必须装满。为了让ans最小,考虑让 kk最小, -sum小于0,-sum/gg 时, kk*gg恰好为最小的大于等于-sum的数字,因题目保证有界,故kk*gg一定不会越界,这样ans得以求出,字符串产生逆序对的时候,当且仅当两种情况,一种是,前缀相同,出现一对不相同字母,一种是,一个字符串是另一个的前缀。本题给的是图,图和树的关系,有比较热门的一点,那就是基环树。字典树,首先肯定要想到预处理。

2023-05-18 02:12:59 1705 6

原创 XOR Tree - 树上启发式合并

我们记录根节点到每个节点路径上的异或值,一个以rt为根的子树中,横跨rt节点路径出现0路径的情况,当且仅当 sum[x] ^ val [rt] ^ sum[y] == 0 特别的,当以rt结尾不横跨的时候。在以rt为根的树中,每次把集合大小最大的儿子设为重儿子,并把轻儿子合并到重儿子上面,这样最多合并logn次,剩下的轻儿子,暴力遍历,重儿子每次都免与遍历,复杂度nlogn。sum[x] ^ sum[rt] ^ val[rt] ==0 ,这一情况在我们一开始就把sum[rt]加入集合时,可以完美解决。

2023-05-06 11:05:03 133

原创 E. Tufurama

可持久化线段树的前缀和写法,当然本题准确来说并没有用到前缀和,却借助了其中的思想。按照下标建立可持久化线段树,每次在[1,min(i-1,a[i])]的区间里面查询 大于等于aj的数字个数,不重不漏,思维含量低。

2023-05-01 21:57:17 78

原创 F. Subtree Minimum Query

6 secondsinputoutputnnumberaiidijiandjitojkxymixiandkiajjsuch thatjbelongs tokixiInputnandr(1 ≤r≤nnintegersa1,a2, ...,an(1 ≤aiThennxandy(1 ≤xy≤nxandym(1 ≤mThenmipiandqiipi。

2023-05-01 20:51:20 79

原创 D. Jamie and To-do List

对于每个事物的优先级建立一个可持久化线段树,对于各种优先级事物的出现次数建立一个线段树,判断条件多但不复杂,模拟即可。算是一道模拟题,建立两个可持久化线段树,值域虽然1e9,但我们最多2e5个数据,每次动态开点,空间不会爆掉。

2023-05-01 19:47:56 77

原创 F. One Occurrence

在右端点确定的情况下,[L,R]数字出现次数为1次,当且仅当这一区间上一次出现的位置在[1,L-1]或者没有出现,即[L,R]每个数字上一次出现位置的最小值。所以可以建立以R为根的可持久化线段树,由R-1转移过来。R[i-1]为根的线段树如果已经存在了 上一个a[R]的上一个位置,如 a[R] ..... a[R] .... a[R]。查询[L,R]的时候,R固定,再往前面的a[R]都没有意义,因为只有对于a[R]来说,只有最后一个与倒数第二个之间的L才具有查询意义。

2023-04-30 22:39:32 47

原创 F. One Occurrence

擦边开O2过的,依旧是莫队记录cnt, 开栈存储出现一次的数字,并记录数字在栈中的位置。当加入数字时,直接加入即可,当删除时,若为栈顶,直接删掉,否则,用栈顶替换掉当前位置数字,且栈顶出栈即可。正解不是莫队,应该是可持久化线段树配合线段树上二分。

2023-04-30 21:42:21 46

原创 Complicated Computations

求全部连续子序列mex的mex,首先不难想到,一段mex为X的连续子串,一定不含x,这样就可以枚举1--n,每次按照数字出现位置将数组分隔为若干段,用莫队更新区间每个数的Cnt,再同时辅助于树状数组更新每个数字是否出现,查询即可。一个剪枝是,当长度len

2023-04-30 21:04:24 69

原创 Machine Learning

带修莫队模板,主要在于mex的操作,一段区间数字出现次数的mex,不放直接用cntcnt数组,记录cnt的出现次数,易知暴力遍历cntcnt的时候,最多到根号n的水平,因为呈现调和级数增长,最多遍历到根号n就超过了总区间长度。mex指的是一些数字中最小的未出现的自然数。值得注意的是,区间[l,r][l,r]总有数字是没有出现过的,所以答案不可能为0.1、查询区间[l,r][l,r]中每个数字出现次数的mex。2、单点修改某一个位置的值。

2023-04-30 16:20:51 300

原创 C. Points on Plane - 基础莫队 奇偶排序

将x,y看做区间左右端点,那么曼哈顿距离最小可以抽象成莫队指针移动的距离最小,奇偶排序即可。但是本题卡sqrt(n),改成sqrt(n)+1后能过,且快了两倍甚至三倍。

2023-04-29 21:15:49 87

原创 D. Powerful array - 基础莫队

按照跟定式子求出cnt[a[i]]-->cnt[a[i]]-1时,cnt[a[i]]+1时的改变量即可,板题。

2023-04-29 20:25:38 76

原创 Minimum-cost Flow 【网络流】

以(val,1) =(1,1/val) *val为例,当边权变为1的时候,总收入同比例变化没问题,但此时每次增广得到的1,对应的是val的个数,当此时边权为 cost*val时,答案才没有误差。(1,1/val)*val = (1,1/val) u / v, 而*u操作恰好被完成,只剩下/v操作。设花费 (val,1) = (1,1/val) *val , 对于(1,1/val)我们进行进一步转化, (1,1/val)为 (1,v/u) ,再转化为 (u,v)

2023-04-29 19:55:05 79

原创 带修莫队 时间轴

【代码】带修莫队 时间轴。

2023-04-28 23:50:14 55

原创 基础莫队-离线求区间集合大小

先按照左端点属于的块进行排序,不同块时,按照块的编号排序,同块时,按照左端点奇偶性决策,奇数时,按照右端点进行升序,偶数时,右端点降序。将增加与删除操作合并,会优化掉不少时间,下面一,二转化为三,缺点是难以调错。3 指针移动的常数压缩。

2023-04-28 16:24:32 40

原创 E2. Three Blocks Palindrome (hard version) -二分查找 暴力

200以内是有其道理的,可以做一个1--200的前缀和,另外贪心的想,我们从头选取的时候,一定是选取当前位置作为 前后段的数字的,当前位置选取之前另一些数字都不是最优的,所以遍历到一个位置就必须把这个位置的数字当成前后段数字,那么前缀和求出来前段数字个数,二分查找后段这个对应数字个数的最右侧,最右侧一定是最优的,然后暴力枚举在此之间1-200的任意一个数字作为b,取最大值即可。

2023-01-21 13:21:37 116

原创 B. Edge Weight Assignment -结论 树

证明如下,另一个叶子结点为偶数,在满足其余全部叶子结点距离都是偶数的时候,这些叶子结点之间 势必要么是子树关系,要么是并列关系,子树关系很显然,偶数减偶数一定是偶数,并列关系必定有LCA,那么必定会有重合地方,也就是 x+y=偶数=x+z ,可以证明 x为偶数时,y,z为偶数,x为奇数时,y,z为奇数,奇偶性相同,其和必为偶数。是个结论题,首先看最小值,显然是1,满足条件无非是每个叶子节点之间的距离都是偶数,比如样例1,3。这一验证如何快速进行呢?

2023-01-21 12:30:37 112

原创 C. Count Triangles -差分 -枚举

考虑最为暴力的方法,也就是统计x+y>z的数量, 枚举z,对于每一个z,暴力枚举大于z的x+y,显然会超时。值得注意的是z1

2023-01-21 11:34:13 135

原创 D. Numbers on Tree -优先队列 -构造

证明 若两个点数值相同 ,位置在不同子树中,对其中一个子树进行操作,对于其管辖的子树,可以整体移动,这样子树内部不会影响, 对于比它大的父亲节点,也可以直接平移一些,这样不会影响。那么根据这一猜想,把全部节点放进一个优先队列,每次我们弹出来一个最优的,c最小,c相等时优先弹出来深度更大的,也就是子孙节点。若两个在同一子树, 必定一子一祖先,考虑把子孙节点增加,这样两两之间不会影响,再通过修改其他位置可以。首先是个构造题是不用多想的,CF构造题目要么是数学性质较多的构造,要么是“子问题分解型”

2023-01-20 21:59:05 96

空空如也

空空如也

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

TA关注的人

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