蒟蒻修养之cf橙名计划2
29
由于第一篇没写题意导致大部分神题题解已经完全不知道在说啥了...所以还是重开一篇保平安...
【303A】题意:求三个长度为$n(n<=10^5)$的排列$a,b,c$使得$a_i+b_i \equiv c_i \pmod{n}$;题解:神题...(手贱点进chinaround...)。首先$n$为偶数无解(首先$n|\sum{(ai+bi)}$而因为$n$是偶数所以$n \nmid \sum{ci}$);$n$为奇数时,可以设$n=2k+1$,而我们假设$a_i=b_i$,那么也就是$2a_i \equiv c_i \pmod{2k+1}$,当$0 <= a_i <= k$时,显然$c_i$都是偶数不相同,当$k<a_i<2k$时,$c_i$显然是奇数不相同,所以一共有$k+1+k=2k+1$个数。那就构造出来了...(虽然我没构造出来QAQ)
【301A】题意:长度为$n*2-1(2<=n<=100)$的数组,元素为整数。现在有操作:将任意$n$个元素乘上-1。可以进行任意次操作。求能得到数组的所有元素的最大和。题解:首先分析:1、当有偶数个<0的元素时,我们可以逐个翻负数的值,最终显然能将翻过的恢复即全都能翻成正数。2、当有$a>=n$个<0元素时,我们先翻$n$个还剩$b=a-n<n$个元素,显然如果b是偶数那么同1。如果b是奇数,首先我们发现如果n为奇数时,每一次会将$n-1=偶数$个变成相反数(我们可以全部翻剩下的$n$个正数),最后一定是剩下偶数个是负的,那么又变会1、。当n为偶数时,每一次会翻$n-1=奇数$个相反数,而$b$为奇数,所以$b-1$是偶数,所以一定翻了一个正数变为负数。无论剩下怎么翻,负数的个数都是奇数。而我们可以翻成最优的(假设拿走一个负数,剩下的都可以翻成正数),所以只需要减去绝对值最小的一个元素就行了。
【297A】题意:两个长度小于1000的0-1字符串a、b。现在允许操作:1、去掉a最前面的数。2、在a后边添加一个数(如果a中1的个数为奇数那么为1,否则为0)。现在给出a和b,问能否通过操作使a变成b。题解:wa了好多发...最后膜拜了题解QAQ好神..首先发现如果有偶数个1时,我们当前边去掉一个1,后边立刻可以补回一个1,即可以保持1的数量不变。(而奇数个1时我们可以在后边补1变成偶数个)。而我们什么时候去掉1呢?在任意的地方都可以!所以无论什么(1的个数小于原串的)字符串都能构造出来!于是本题解决..
【295A】题意:长度n的序列,有m种操作,每种操作将Li~Ri加上Di。另k行,两个数l,r表示一次执行l~r的操作。(n,m,k<=10^5)。题解:我这么弱差点还上线段树= =其实这是可以差分的...我竟然又忘记了..算是提个醒..
【288A】题意:长度为n的字符串,放k个不同的小写字母,相邻字符不同。问字典序最小的字符串(n,k<=10^5)。题解:sb题.........
【288B】题意:n个点的有向图,每个点出度为1。要求前k个点能到达1点(k<=8),后边的n-k个点不能到达1点。答案mod 1e9+7 问方案数。(n<=1000)题解:很容易发现我们只需要求前k个点的方案数后边乘上(n-k)^(n-k)就行了...一开始我看到k<=8以为用状压= =于是写完发现不对...状态转移有重复!于是就傻掉了...看了别人的代码= =吓抽了...k<=8直接暴力啊!8^8的状态完全可以承受啊= =...
【286A】题意:求满足$p_{p_i}=n-i+1$的1~n的排列,n<=1e5。题解:推了一下发现周期是4....然后又推了一下发现周期为4时才有解。又推了一下发现只要前面2个后面2个就能构成一个周期..n为奇数时中间那个可以单独构造为自己..然后就能a掉了..
【277A】题意:n个人m种语言求让所有人都能直接或间接有语言相同的最小代价。(n,m<=100)题解:裸的并查集...妈呀注意并查集最后要合并而且注意特判每个人都没有学语言的特殊情况!
【274A】题意:从n个不同的数选出满足不存在x<y且y=x*k的最大独立集。(n<=10^5)题解:妈呀一开始我没看到“不同”二字还开了个map来计出现次数= =这一题显然的贪心吧,该取最小的就取最小,然后删掉x*k即可。
【264A】没意思太水了..
【265B】题意:给出一个严格上升的长度为n的序列,求一个子序列使得子序列满足严格上升且相邻元素不互质。(n<=10^5)题解:sb dp....一开始脑残了wa了and tle几发..
【258A】没意思太水了...
【429B】题意:n×m的网格,一个人在左上角(走到右下角)一个人在左下角(走到右上角),路径只能交于一个点,求两个人路径的权值和去掉相交点的权值和的最大值。(n,m<=1000)无脑dp....我们枚举相交的点发现只有两种情况,去最大值即可。
【251A】题意:n个元素,从中任意取3个元素使得最大的两个元素之差<=d,求有多少种取法(是组合不是排列)。(n<=10^5)题解:水题....从小到大排序后枚举右端点然后找到对应左端点然后加上取两个元素的方案即可。
【235A】题意:从大于等于1小于等于n之间找出三个整数使得lcm最大。(n<=10^5)题解:妈呀好神的题啊...题解也没说这是为啥啊...我们之间从[n-a, n]枚举三个数就行了....我是从[n-100, n]枚举的,跪orz
【407B】题意:n个点,每个点两个门,一个向回走走到p[i](1<=p[i]<=i),一个向前走走到i+1,如果当前在i且i已经被访问过奇数次,向回走,否则向前走。问走到n+1的步数。(n<=1000)题解:简单递推...设计d[i][0]表示当前在i已经被访问过奇数次的步数,d[i][1]表示已经访问过偶数次的步数,由于当前如果在i点,1~i-1的点必然变成了偶数,因此相当于第一次往回走,即d[i-1][1]+1-d[p[i]][0]。所以转移就是:d[i][0]=d[i-1][1]+1, d[i][1]=d[i][0]+1+d[i-1][1]+1-d[p[i]][0]
【406B】题意:给出n个不同的数集X,要求从1~s找出一个数集Y使得X交Y为空且$\sum_{x \in X} (x-1) = \sum_{y \in Y} (s-y)$。(n<=5*1e5, s<=1e6)题解:竟然没想到.....首先如果有$y=s+1-x 且 y \notin X$那么直接加入$y$,否则由于$x+y=s+1$,所以如果已经有了$x \in X, (s+1-x) \in X$,那我们再找一组$y \notin X, (s-1-y) \notin X$就行了嘛= =
【388B】题意:构造一个n个点的边权都为1的无向图,要求1-2恰好有k条最短路。(n<=1000, k<=1e9)题解:一开始写了个素数分解然后乘法乘起来QAQ喜闻乐见没想到有素数这玩意= =后来yy了一下发现其实这个二进制是可以做的...由于4个点可以构造成一个路径为2的图,我们连接起来然后中间类似快速幂搞一搞就行辣= =
【383C】题意:一棵n个点的数。m次操作。1、使1个点的权值加上val,并使偶数层的子孙减去都-val,奇数层的子孙都+val。2、单点查询。(两种操作混合)(n,m<=200000)题解:一开始想到用线段树直接维护了= =可是翻了翻题解发现还有更快的写法..每一次只是奇数和偶数层的更改= =我们直接维护两个结构一个存奇数的修改一个存偶数的修改就行了嘛= =支持单点修改维护前缀和的结构当然是bit啦= =、
【494A】题意:给一个括号序列包含'(', ')', '#',其中'#'至少换成1个')',问给出序列是否能变成合法括号序列且输出每个'#'替换的')'数(|s|<=1e5)。题解:贪心一下,每一次选从右选最多的所需'('即可。
【375A】题意:给一个大数(10^5位)保证出现'1','6','8','9',要求重新组合(且不包含前导0)使得mod7=0.题解:一开始没思路然后发现mod7只有7种可能然后用1 6 8 9组合了一下发现0~6都出现啦!然后就是愉快的码。可是由于前导0的原因我sb的wa了好多发啊啊啊啊啊QAQ
【367A】题意:给一个长度为n的只包含'x'、'y'、'z'的串,给m个询问,每次询问[l, r]是否能组成一个'xyz'的循环串。(n, m<=1e5)题解:各种看不懂题= =于是看了中文题意然后就是sb题了...只需要判断这个区间的三个字母个数是否相差了>=2即可。
【375B】题意:给一个n×m的01矩阵,要求一个全是1的子矩阵面积最大。行可以互相交换。(n,m<=5000)题解:妈呀差不多想出来的时候手残点了下题解= =预处理每个点往右最远到达的地方然后从左往右扫每一列,按右边能拓展的个数为权排序然后随便搞就行了= =
【367B】题意:给一个n个元素的a数组和m个元素的b数组以及p,求a中有多少个q使得a[q+i*p], (0<=i<m)等价于b数组(及无序集合)。(n,m<=2*1e5)题解:很好想..直接暴力就行了..关键是发现我竟然不会判断两个集合相同!(除取模hash以外,因为我相信取模的hash在比赛中一定会被hack!)于是膜拜了tourist的代码,好神哪!首先我们离散每个数到一个值中,然后直接开个计数器计数即可!跪!
【364A】题意:给一个数s,定义b[i][j]=s[i]*s[j],求矩阵b中有多少个子矩阵的和为a。(|s|<=4000, a<=1e9)题解:没想出来QAQ跪!首先其实是能发先对于一个子矩阵$(x1,y1), (x2,y2)$的矩阵和为$sum(x1, x2)*sum(y1, y2)$!于是直接搞!
【343B】题意:两段缠绕的电线,给出每一段是'+'电线在上还是'-'电线在上,要求判断能否解开且'+'都在上边,'-'都在下边。(|s|<=100000)题解:妈呀一开始发现如果两段是奇数的话一定是NO...本来想到了如果连续的段那么可以消掉,可是不知道哪里写挫了?后边发现用个栈来维护消除的序列即可= =
【229A】水题略= =
【229B】题意:n个点m条边的无向边权图。当i点在$t_{i, j}$时会向后推$1$的时间,如果还有$t_{i, k}=now$,则一直向后推。问1到n的最短路。(n, m<=100000)题解:发现无论何时在每个点出发的时间尽量的早= =(就是裸的最短路),边权乱搞一下就行了= =
【229C】题意:n个点m条边的无向图,令G为n个点的完全图减去所给的图,问原图和G图中环长为3的点对数。(n, m<=1e6)题解:QAQ之前乱搞了一下可是没时间了QAQ....于是果断膜拜题解...妈呀完全没想到啊= =容斥..$ans=C(n, 3)-\sum_{x=1}^{n} in[x]*(n-1-in[x]), in[x]表示x的度= =$至于为啥自己想= =