首页 > 其他分享 >Atcoder Regular Contest 165(A~E)

Atcoder Regular Contest 165(A~E)

时间:2023-09-19 11:33:38浏览次数:51  
标签:偏序 Atcoder 连通 概率 节点 约束 Regular 165 我们

赛时 45min 切 A~C,降智不会 D,罚坐 1h,喜提 rk70+ -> rk170+。

A - Sum equals LCM

可证明结论:若 \(N\) 只含有一种质因子则无解,否则有解。

B - Sliding Window Sort 2

这么多 corner case 的题竟然 10min 一发入魂,类目了。

由于操作是升序排序,且要求最终字典序最大,所以如果存在一个长度为 \(K\) 的递增子序列,我们一定是会操作它的。否则我们会将操作尽可能地向后放。

贪心地讲,我们一定会让字典序发生改变的位置在 \(n-K\) 之后,否则一定没有无脑操作 \([n-K+1,n]\) 更优。所以我们可以先将操作放在 \([n-K+1,n]\),并且向前寻找左端点前一个位置上的值是否小于左端点位置,若是则向前移动区间,直到移动不了即可得到最优操作区间。

C - Social Distance on Graph

写了很菜的二分答案。考虑如何判定。

首先有经典结论:若两条相邻的边边权和小于 \(X\),一定无解。证明可以采用鸽巢原理。

所以我们可以由此结论先确定二分上界。

限制完这个之后我们发现此时对于任意长度大于等于 \(2\) 的路径都是一定合法的,剩下的只有长度为 \(1\) 的路径了。于是把所有边权 \(<X\) 的边拉出来黑白染色,判断是否为二分图即可。

时间复杂度 \(O(n\log V)\)。

D - Substring Comparison

其实没必要一上来就把约束形式化描述的,不妨先只考虑每一条约束中最简洁最弱的那个,即 \(a_i<c_i\)。

将二元偏序关系连边,如果不出现环则直接出解,否则每个强连通分量位置上的值一定相同,而这些相同会打破一些偏序关系,强制使得一些 \(a_i=c_i\)。此时我们可以将被打破的约束中的 \(a_i,c_i\) 不断后移,直到两者不在同一连通分量为止,此时若 \(c_i>d_i\),则一定无解,否则若 \(a_i>b_i\),我们之后就可以不再管这条约束。若 \(a_i,c_i\) 依旧小于 \(b_i,d_i\),我们可以在图上建立若干新边表示这些新的偏序关系,一直做下去直到不再产生新的强连通分量为止。

由于至多会跑 \(n\) 次 tarjan,且对于每个偏序关系至多移动 \(n\) 次,所以时间复杂度为 \(O(n(n+m))\)。

本题启发我们对于带有继承关系的【或】约束,不妨先从最弱的约束下手,根据是否合法依次增强约束。

E - Random Isolation

其实很容易想到树形 dp 来做,但是难点在于如何计算连通块的贡献。对吧,我们既不知道连通块被删的先后顺序,也不清楚如何计算当前连通块被分割之后的贡献。

但是我们发现我们并不需要知道这些啊?如果对于当前局面,存在一个大小为 \(x>k\) 的连通块,无论如何我们一定会删它一次,它无论如何都会造成一次删除代价。所以其实只要我们知道该连通块出现的概率,我们就可以得到它对于问题的贡献。而删这个连通块之后的代价则可以交给其子连通块统计,对于当前连通块的贡献我们就不用再管了。所以最终的答案即为所有 \(x>k\) 的连通块出现的概率之和。

所以现在问题来到了,如何统计某个连通块的出现概率

考虑将问题进行神秘的转化:随机一个长度为 \(n\) 的排列 \(P\),从 \(P_1\) 到 \(P_n\) 依次考虑每一个节点当前所在连通块大小是否 \(>k\),若是则删除,否则不删,求有效删除次数的期望。两个问题是等价的,因为固定了前若干个有效删除位置之后,下一个有效删除位会等概率出现。

设连通块大小为 \(x\),与该连通块相连的节点个数为 \(y\),此时我们可以将统计连通块的出现概率转化为统计在 \(P\) 中 \(x\) 个节点在 \(y\) 个节点之后的概率,即为 \(\frac{x!y!}{(x+y)!}\)。可以发现上步转化通过将随机删点转化为随机排列,使得我们对于概率的描述变得清晰了许多。

于是我们现在只剩下了最后一个任务,统计每一种 \((x,y)\) 的连通块各有多少个。

这个使用树形 dp 统计就很方便了。可以设 \(dp_{u,x,y}\) 表示以 \(u\) 为根,大小为 \(x\),且有 \(y\) 个节点与之相接的连通块个数,转移套路树形背包即可。总时间复杂度 \(O(n^2k^2)\)。

将统计的主体转化成每个连通块,将随机删点转化为随机排列,很巧妙的题目啊。

标签:偏序,Atcoder,连通,概率,节点,约束,Regular,165,我们
From: https://www.cnblogs.com/ydtz/p/17714195.html

相关文章

  • AtCoder Beginner Contest 320
    A-LeylandNumbera,b=map(int,input().split(''))print(a**b+b**a)B-LongestPalindromes=input()n=len(s)res=0forlinrange(1,n+1):foriinrange(0,n-l):t=q=s[i:i+l]t=t+t[::-1]......
  • ARC165F Make Adjacent
    D1a5y。记录\(x(1\lex\len)\)出现位置分别为\(l_x,r_x(l_x<r_x)\),讨论一下发现当两个数\(x,y\)满足\(l_x<l_y,r_x<r_y\)时操作后\(x\)一定出现在\(y\)前面,不然可以交换位置以达到更优步数。否则发现无论怎么操作发现都不影响答案。所以我们将\(x\)描述为平面上......
  • ARC165 做题记录
    有点结论场的感觉了。A题面简单题。证明一个结论,只要\(n\not=p^q(p\text{是}n\text{的一个质因子})\),都是有解的,反之无解。先证明\(n=p^q\)无解,假定\(n\)分解为\(p^a\timesp^b(a\leb,a+b=q)\),此时两数的\(\mathop{\mathrm{lcm}}\)为\(p^b\)。若\(b=q\),则\(p^b......
  • [ARC119F] AtCoder Express 3
    题目链接观察样例1的解释,发现切换类型的方法是比较单一的这种就是直接走一段换一段,我们可以人为钦定换乘时最多走一步,因为相邻的同色也可以视作走车站这种情况复杂一些,需要往回走一段,但是依然可以发现往回走也至多一步,因为如果走了两步说明往回走了一步到达的车站依......
  • 【杂题乱写】AtCoder-ARC113
    AtCoder-ARC113AA*B*C枚举\(A,B\),那么\(C\in[1,\left\lfloor\frac{K}{AB}\right\rfloor]\),时间复杂度是\(O(K\logK)\)。提交记录:Submission-AtCoderAtCoder-ARC113BA^B^C\(A^k\)的末尾存在循环节,找到循环节长度\(|T|\),答案就是\(A^{B^C\bmod|T|}\bmod10\)。提......
  • 【题解】AtCoder-ABC320
    AtCoder-ABC320ALeylandNumber依题意计算。提交记录:Submission-AtCoderAtCoder-ABC320BLongestPalindrome直接\(O(n^2)\)枚举,\(O(n)\)判断。提交记录:Submission-AtCoderAtCoder-ABC320CSlotStrategy2(Easy)不妨将字符串复制三遍,枚举\([0,3m)\)判断。提交......
  • atcoder313C
    313C题目概述:给定序列A,可以任选两个数,使其中一个数加1,另一个数减1.可以通过任意次操作,问需要至少多少次操作,才能使A中最大数和最小数差值不超过1。解题思路:将该题进行抽象转化:1.我们需要将A序列转化为B序列,sumB=sumA。操作次数为:\(\frac{\sum\limits_{i}^n|a_i-b_i|}{2}\)2......
  • AtCoder Grand Contest 063
    PrefaceAGC好难啊,这场补完最近就没啥比赛好补了,接下来去训练下专题吧像C题这种美妙的人类智慧题感觉以我的脑子一辈子也想不出来wwwA-MexGame对于任意一段前缀,我们可以求出对应的每个人的操作次数以及每个人拥有的位置数考虑Alice的最优策略一定是从小到大地放入Bob对应......
  • AtCoder Grand Contest 058 F Authentic Tree DP
    洛谷传送门AtCoder传送门人生中第一道AtCoder问号题。设\(P=998244353\)。注意到\(f(T)\)的定义式中,\(\frac{1}{n}\)大概是启示我们转成概率去做。发现若把\(\frac{1}{n}\)换成\(\frac{1}{n-1}\)答案就是\(1\),所以\(\frac{1}{n}\)大概是要转成点数之类的。......
  • AtCoder Beginner Contest 319 全部题解
    AtCoderBeginnerContest319全部题解ALegendaryPlayers该题只需使用判断来写出所有的答案,注意不要复制错。#include<bits/stdc++.h>usingnamespacestd;strings;intmain(){ cin>>s; if(s=="tourist")cout<<3858<<endl; if(s=="ksun4......