题目颜色大致代表题目难度(红$sim$紫 即 易$sim$难),点击各题标题可以跳转到原题。
A - Large Digits
题意:给定两个三位数,输出数位和较大数字的数位和。
题解:
- 将三位数 $a$ 分解,那么分解的结果 $a mod 10$ 是个位,$lfloor frac{a}{10} floor mod 10$ 是十位,$lfloor frac{a}{100} floor$ 是百位。
- 将数位加起来,比较一下输出即可。
代码:https://atcoder.jp/contests/abc187/submissions/19117735
B - Gentle Pairs
题意:
- 给出 $n$ 个点,问能挑出多少个点对使得点对的斜率在 $[-1,1]$ 中。
- $n le 10^3$,$|x_i,y_i| le 10^3$,所有点的 $x_i$ 均不相同。
题解:
- 暴力枚举点对,利用公式计算斜率,然后判断统计就做完了。
代码:https://atcoder.jp/contests/abc187/submissions/19123852
C - 1-SAT
题意:
- 有 $n$ 个只包含小写字母和「!」的字符串,且「!」只可能在串首出现。
- 如果有一个带「!」的字符串它的小写字母部分以前作为一个完整的字符串出现过,那么说明数据有误。
- 请检查这批字符串是否有误,如果有输出错误字符串,否则输出「satisfiable」。
- $n le 2 imes 10^5$,$|s| le 10$。
题解:
- 用一个 map 记录它是否出现过 / 出现过时是否前有「!」。
- 如果存在字符串 $s$,使得 $!+s$ 和 $s$ 在 map 都记录过,那么就输出 $s$。
- 如果无矛盾输出「satisfiable」就可以。
代码:https://atcoder.jp/contests/abc187/submissions/19130026
D - Choose Me
题意:
- 高桥和青木要选举。对于每个城市,有 $A,B$ 两个选举参数。
- 若高桥有到该城市发表演说,那么高桥会增加 $A+B$ 票,青木增加 $0$ 票;否则高桥增加 $0$ 票,青木增加 $B$ 票。
- 计算高桥至少需要到多少城市演说,才可以使得他的票数大于青木。
- $n le 2 imes 10^5$,$A,B le 10^9$。
题解:
- 推导发现,如果高桥在一个城市发表演说,那么他会拉开青木 $A+B$ 票;否则青木会拉开高桥 $B$ 票。
- 即如果高桥发表演说,那么他会相对于不发表演说拉开青木 $A+B+B=A+2B$ 票。
- 对所有的城市按照 $A+2B$ 从大到小的优先级发表演说,直到票数大于青木时停止,输出答案。
- 时间复杂度 $O(n log n)$,瓶颈在于排序。
代码:https://atcoder.jp/contests/abc187/submissions/19134915
E - Through Path
题意:
- 给定一棵 $n$ 个节点的树,$n-1$ 个条边中设较早输入的顶点记入数组 $A$,较迟输入的顶点记入数组 $B$。
- 初始这棵树每个点权值为 $0$。
- 有 $m$ 次操作,每次操作给出三个参数 $t,e,x$。
- 如果 $t=1$,那么将所有从 $A_{e}$ 开始不经过点 $B_{e}$ 且可以遍历到的点权值加上 $x$。
- 如果 $t=2$,那么将所有从 $B_{e}$ 开始不经过点 $A_{e}$ 且可以遍历到的点权值加上 $x$。
- 最后输出每个点的权值。
- $n,m le 2 imes 10^5$,$x le 10^9$。
题解:
- 我们其实可以发现,题目要求的操作无非就两类:
- ① 将一个子树的节点权值全部加上 $x$;
- ② 将一个子树以外的节点权值全部加上 $x$;
- 因为答案可以放到最后求,我们可以利用树上前缀和先 $O(1)$ 打标记,最后遍历一遍得出答案。
- 遇到 ① 操作,我们直接在子树的根打标记为 $x$;
- 遇到 ② 操作,我们可以将整棵树加上 $x$,并在子树的根打上 $-x$ 的标记。
- 最后从根到叶子节点途径的标记和就是对应的节点的权值。
- 时间复杂度 $O(n+m)$。
- 记得开 long long,比赛时因为这个罚时 +5min。