Atcoder ARC-150

A - Continuous 1

给定一个长度为 nn 的只包含0,1,?的字符串,是否只存在一种替换?的方案使得字符串仅有 kk1且所有的 1 在某一个区间 [l,l+k1][l,l+k-1]内。

  • 解法:

滑动窗口,判断该区间是否可为 kk1,且其他位置都是 0

code

B - Make Divisible

给定正整数 A,BA,B,求最小的 X+YX+Y 使得 X,Y0,(B+Y)=k(A+X),k1X,Y \geq 0,(B+Y)=k(A+X),k \geq 1

  • 解法:

可以得到式子:Y=kA+kXBY=kA+kX-B

上式可转化成 X+Y=kA+(k+1)XBX+Y=kA+(k+1)X-B

容易发现当 kk 确定时,当XX 最小时,X+YX+Y 最小。

通过 X,Y0X,Y \geq 0 得到:Xmin=max(0,B1k+1A)X_{min}=\max(0,\lfloor\frac{B-1}{k}\rfloor+1-A)

于是 X+Y=kA+(k+1)×max(0,B1k+1A)BX+Y=kA+(k+1)\times \max(0,\lfloor\frac{B-1}{k}\rfloor+1-A)-B

这里枚举 B1k\lfloor\frac{B-1}{k}\rfloor 的值,可以除法分块,设 w=B1kw=\lfloor\frac{B-1}{k}\rfloor,那么当 ww 固定时,kk 最小则 X+YX+Y 最小。

复杂度 O(B)O(\sqrt B)

code

C - Path and Subsequence

给定 nn 个点,mm 个边的连通无向图(无自环重边,ui<viu_i<v_i)以及长度为 nn 的数组 AA ,长度为 kk 的数组 BB ,是否满足对于所有简单路径 v=(v1,v2,...,vp)(v1=1,vp=n)v=(v_1,v_2,...,v_p)(v_1=1,v_p=n)BB[Av1,Av2,...,Avp][A_{v_1},A_{v_2},...,A_{v_p}]的子序列。

  • 解法:

fif_i 为所有从 11ii 的简单路径能扩展到的 BB 的最小值,即[B1,...,Bfi][B_1,...,B_{f_i}]满足子序列关系。满足题目关系当且仅当 fn=kf_n=k

那么对于所有边 (u,v),v=i(u,v),v=ifv=min(fu+[Bfu+1=Av])f_v=\min(f_u+[B_{f_u+1}=A_v]),特别的,当fu=kf_u=kfv=min(fv,k)f_v=\min(f_v,k)

基于 Dijkstra 的贪心思路,可以用堆优化做到 O(nlogn)O(nlogn)ff 求解。

code

待更

Author: cjh-hhz
Link: https://cjh-hhz.github.io/d48e54d6e74d.html/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.