ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ARC119

2021-06-15 17:34:40  阅读:179  来源: 互联网

标签:连通 那么 ARC119 源点 激发 染色 方向


Day 4 继续带着嘟嘟可 virtual 上分(下分

A

枚举\(O(\log n)\)个b,然后向下整除得到a和c,a每增大1就有c减小\(2^b \ge 1\),所以保证正确性

Submission #23479174 - AtCoder Regular Contest 119

B

发现操作本质上是在移动0,而且路程中不能跨越其他的0,于是从左到右做个计数,对应的匹配关系就唯一了

如果对于某个0无法直接移动到匹配0(中间有障碍),那么就先处理障碍,这样递归下去能保证每个0最多移动一次

剩下的就是检查有没有已经匹配好的0对,可以使ans-=1

Submission #23479319 - AtCoder Regular Contest 119

C

考虑如何判断一个区间是否合法,贪心地操作即可,对于最左端的\(a_1\)要把它变成0,那么我们就得让\(a_2:=a_2-a_1\),然后\(a_1:=0\)(减完是负的也没有关系,因为我们下一步会把它加成0,而操作顺序没有实际影响),最后判一下是不是所有数都变成0了即可

反复推几个就可以猜测合法的充要条件为奇数位和偶数位各自加和相等,证明也很简单,我们每次操作都是同时涉及到一个奇数位和一个偶数位,二者变化量相等。所以如果奇数位和等于偶数位和操作到最后一定全为0,同时如果最后全为0那么显然奇数位和等于偶数位和,充要成立。

\(s_{i,0/1}\)分别表示在\(i\)位置时的奇偶前缀和,那么区间\((j,i]\)成立的充要条件为\(s_{i,0}-s_{j,0}=s_{i,1}-s_{j,1} \iff s_{i,0}-s_{i,1}=s_{j,0}-s_{j,1}\),拿个map统计一下有多少个特征值相同的前缀即可,时间复杂度\(O(n \log n)\)

Submission #23479549 - AtCoder Regular Contest 119

D

赛时理解出了 key observation,再整理一下就是正解了

容易发现如果确定某个点\(u\)的染色方向,并且染色途径了未被染色的\(v\),那么\(v\)应当在此之前染相反的方向,我们称这种关系为\(u\)激发\(v\),如果\(u\)不被其他点激发那么称\(u\)为激发源点

如\((1,1)\)染\(x\)方向,那么途径的\((2,1)\)就应该在此之前染\(y\)方向

令人头疼的一点是激发点不知道该确定为谁,而且激发源点可能会有很多个,而且激发关系可能成环......

重要的一点是如果\(u\)被激发(\(u\)不为激发源点),那么\(u\)的\(x,y\)方向一定都被染色了,一个是被激发方向一个是激发方向,所以不用考虑成环问题。而激发源点的特殊之处莫过于不能被激发,即有某一个方向不能被染色,我们只要阻止所有试图在这个方向上的染色,就能避免成环

如果我们把\(x\)相同或\(y\)相同的点连成连通块,那么对于一个连通块而言,一定存在一种激发方案使得只有某一行或一列没被染色。比如令\(x=x_0\)没被染色,那么我们令这条线的所有点成为激发源点,就可以使连通块内所有点被激发,且没有被染色的只有\(x=x_0\)

如果总共染了a行b列,那么答案就是\(am+bn-ab\),枚举一下有多少连通块不染行,多少不染列即可

输出方案就对于每一个连通块,随便选一个行或者列,按上面所说的递归激发即可

标签:连通,那么,ARC119,源点,激发,染色,方向
来源: https://www.cnblogs.com/-SingerCoder/p/14886371.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有