zoukankan      html  css  js  c++  java
  • 模拟43 题解

    A. A

    发现不断加a,乘b。

    枚举将s乘k次b,则有

    $t=s*b^k+sum limits_{i=0}^{k-1}used[i]*a*b^i$

    答案即是使得$sum limits_{i=0}^{k-1}used[i]$最小的方案。

    将s,t表示为b进制会比较好算。

    当a=1时,贪心地选择就可以了。

    然后a!=1就不会打了。

    其实将差值除一个a,问题就转化为了a=1的问题。

    B. B

    通过打表发现一些性质:

    若$gcd(i,p)=gcd(j,p)$,则$ans(i)=ans(j)$。

    在数据范围$p<=1e9$内,p最多只有不到两千个因子。

    所以将p个数分为因子个数个组,

    每个组中的每个元素与p的gcd相同,设为k,

    则取k为这个组的代表元素,这个组的元素个数为$phi(p/k)$。

    所以直接将最暴力$O(n*p^2)$的dp改为$O(n*d(p)^2)$,$d(x)$为x的约数个数。

    C. C

    最近做了很多关于区间覆盖的题,然而都没有做出来。

    大致思路都是将这些区间先按左端点排序。

    同理,本题排序后贪心。

    因为本题中有一个很关键的性质:每个区间的权值都为1。

    所以从左到右考虑每个点,取得跨过这个点的右端点最靠右的区间就可以了。

    然而有一个特殊的区间,处理方式是枚举选特殊区间多少次。

    这个复杂度是有问题的,所以考虑三分选的次数,就可以了。

  • 相关阅读:
    ural 1227 dfs判环&求最长路
    uva 11990 块状链表
    图论·二分图
    图论·双连通分量
    图论·欧拉迹
    组合博弈
    解题策略·状态精简
    组合计数·棋盘统计
    组合计数·图形统计
    组合计数·经典序列问题
  • 原文地址:https://www.cnblogs.com/skyh/p/11523870.html
Copyright © 2011-2022 走看看