zoukankan      html  css  js  c++  java
  • 【AtCoder Beginner Contest 187】题解

    题目颜色大致代表题目难度(红$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。

    代码https://atcoder.jp/contests/abc187/submissions/19142602

  • 相关阅读:
    learning scala view collection
    scala
    learning scala dependency injection
    learning scala implicit class
    learning scala type alise
    learning scala PartialFunction
    learning scala Function Recursive Tail Call
    learning scala Function Composition andThen
    System.Threading.Interlocked.CompareChange使用
    System.Threading.Monitor的使用
  • 原文地址:https://www.cnblogs.com/zengpeichen/p/14224212.html
Copyright © 2011-2022 走看看