A Game of life week
ABC167 F. Bracket Sequencing
题意:
给定$n$个括号串,判断是否存在一种排列顺序使这$n$个串排序后形成的串合法。$(1 \leq n \leq 10^6)$
题解:
对于每个串$s_{i}$,令’(‘为$1$,’)’为$-1$,计算$balance$,如果$balance$大于等于$0$,放到一堆,否则放到另一堆,令$a_{i}$为$-min\{0,pre_{i,j}\}$,$b_{i}$为第$i$个字符串的$balance$,将问题转化: 初试分数为$0$, 得到第$i$个串的前提是拥有$a_{i}$分,得到第$i$个串之后的分数为$ b_{i}$。判断能否拿完所有的串。
那么对于$a_{i}>=0$的情况,按照$a_{i}$从小到大排序,这是很显然的贪心策略。
对于$a_{i} < 0$的情况,需要按照$a_{i}+b_{i}$从大到小排序,其实本质是按照‘(’的个数从大到小排序,至于为什么不用考虑’)’,是因为我们已经先把$a_{i}>=0$的放在了前面。读者可以自行脑补。
排完序后模拟即可。
代码:
1 | /* |
CF641div2 E. Orac and Game of Life
题意:
一款”生命游戏”,规则如下:
游戏在一个$n*m$的平面上,每个格子为黑色或白色。游戏会进行若干轮,初始为第$0$轮,对于每一轮:
- 对于$(i,j)$,如果它的四周存在同色的格子,该轮$(i,j)$变色。
- 否则不变色
$Q$次查询,对于每次查询,查询$(x,y)$在第$t$轮的颜色。
$(1 \leq n,m \leq 1000, 1 \leq t \leq 10^5)$
题解:
假设对于$(i,j)$,如果$(i,j)$周围存在同色格子,那么定义其为坏格子,否则为好格子,那么对于所有格子,计算离其最近的坏格子的曼哈顿距离$p$,如果$t<p$,则不会变色,否则每次交替变色。对于距离的计算,一次$BFS$即可。时间复杂度$O(n*m+t)$。
代码:
1 | /* |