The 2021 ICPC Asia Regionals Online Contest (II)
Solved | A | B | C | D | E | F | G | H | I | J | K | L | M |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
5/13 | Ø | - | - | - | - | - | - | - | - | O | Ø | Ø | O |
题目链接:
https://pintia.cn/problem-sets/1441745686294945792/problems/type/7
Problem A. Sort
题意:
一个长为 $n$ 的数组,每次你可以将其划分成不超过 $k$ 个非空连续子段并将其重新排列。
这种操作可以进行无限次。
判断是否存在一种操作方案,使得数组从小到大排序,且所有操作划分的段数和不超过 $3n$。
$n\le 1000,\sum n\le 30000$
思路:
- 当 $k=1$ 时,判断是否有序。
- 当 $k=2$ 时,判断是否存在一个位置前后两段交换后有序。
- 当 $k\ge 3$ 时,一定能将元素从小到大插入到数组末尾,每次分成 $3$ 段,不超过 $3n$。
当 $k\ge 3$ 时,可以用树状数组维护位置。
代码:
1 |
|
Problem J. Leaking Roof
题意:
$n*n$ 的网格每个格子有一个高度,向每个格子倒 $m$ 单位的水,格子的水会向和它相邻的高度比他低的格子流动,问所有高度为 $0$ 的格子最后有多少水。
思路:
高度从大到小模拟即可。
代码:
1 |
|
Problem K. Meal
题意:
$n$ 个菜,$n$ 个人,每个人打一道菜,每道菜只能被打一次。
- 第 $i$ 个人对第 $j$ 个菜的喜爱度是 $a_{i,j}$。
- 按顺序给每个人打菜,若给第 $i$ 个人打菜时,第 $j$ 道菜没有被打过,那么打到该菜的概率为对该菜的喜爱度比上对所有没被打的菜的喜爱度的和。
问第 $i$ 个人打第 $j$ 个菜的概率,$n \le 20$。
思路:
状压 DP,$O(n2^n)$。
代码:
1 |
|
Problem L. Euler Function
题意:
给出一个长度为 $n$ 的序列 $x$,你需要维护 $m$ 次操作:
- 修改:区间乘 $w$。
- 询问:区间 $\varphi(x)$ 和。
$n\le 1e5,w,x_i\le 100$
思路:
$x$ 的质因数分解为 $x=\prod{p_i^{t_i}}$,那么 $\varphi(x)=\prod{(p_i-1)p_i^{t_i-1}}$。
因此,当 $x$ 拥有 $p$,$\varphi(x)=\varphi(x)p$,否则 $\varphi(x)=\varphi(x)(p-1)$。
$100$ 以内只有 $25$ 个质数,对 $w$ 分解质因数更新区间,用线段树维护。
如果区间内每个 $x$ 都拥有当前质因数,直接乘,否则单点修改。
代码:
1 |
|
Problem M. Addition
题意:
$\sum_{i=0}^n{sgn_i(a_i+b_i)2^i}=\sum_{i=0}^n{sgn_ic_i2^i}$,已知 $sgn,a,b$,求 $c$。
$sgn\in{-1,1},a,b,c\in{0,1}$
思路:
设进位值为 $d$ $(-1 \le d \le 1)$:
- 当 $sgn_i=-1$ 时,$-3 \le sgn_i*(a_i+b_i)+d\le 1$
- 当 $sgn_i=1$ 时,$-1 \le sgn_i*(a_i+b_i)+d\le 3$
分情况讨论即可。
代码:
1 |
|