• AtCoder Beginner Contest 178 个人题解(C组合问题 + 快速幂,D规律,E数学公式变形)


    补题链接:Here

    A - Not Editorial

    给出 (x = 1) 则输出 0;给出 (x = 0) 则输出 1

    利用 x ^ 1 可以快速实现 (x) 的转换

    B - Product Max

    比较端点乘积的大小即可

    C - Ubiquity

    题解:输入一个N,(0<=A_i<=9),所以一共 (10^N) 种情况,序列中元素个数为 (N),序列中一定存在 0 和 9,要得到至少有一个0和一个9的所有情况,思路使用总共的情况减去只有一个 0 、只有 一个 9 、或者 0 和 9 都没有的情况。

    ans = (ans + mod) % mod;

    因为取余后,各数的大小发生变化,这里防止 ans 减为负数!!!

    typedef long long ll;
    const ll mod = 1e9 + 7;
    ll qpow(ll a, ll b) {
        ll ans = 1;
        a %= mod;
        for (; b; a = a * a % mod, b >>= 1)
            if (b & 1) ans = ans * a % mod;
        return ans;
    }
    int main() {
        ios_base::sync_with_stdio(false), cin.tie(0);
        ll n;
        cin >> n;
        ll ans = qpow(10, n) - qpow(9, n) - qpow(9, n) + qpow(8, n);
        ans %= mod;
        cout << (ans + mod) % mod;
        return 0;
    }
    

    D - Redistribution

    PS:先是看了半天,然后写几组样例,就找到规律了

    (a_i = a_{i - 1} + a_{i - 3}\a_0 = 1,a_1 = a_2 = 0)

    最后别忘记取模即可

    E - Dist Max

    题意:二维平面上有N个点 ((x_i,y_i))。 找到其中两个点的最大曼哈顿距离。

    思路:两点之间的位置关系可以有以下两种模式。

    考虑两个最远点之间的位置关系...

    • (x_i + y_i) 的最大值 (M_1) 和最小值 (m_1) 之间的差异,当两个最远的点是右侧图形时;
    • (x_i-y_i) 的最大值,当两个最远的点是右侧图形时,(M_2)与最小值之间的差异值 (m_2)

    因此,从直觉上讲,最 (max(M_1-m_1,M_2-m_2)) 似乎是答案。 让我们在公式转换的基础上进一步说明这一点。

    公式变形:

    关于绝对值问题前提:(|x| = max(x,-x))

    通常情况下,前景会更好。 对于每对(i,j),即使xi <xj,它也不会失去通用性(反之亦然,交换)。

    [|x_i - x_j| + |y_i - y_j| \ =(x_j - x_i +max(y_j-y_i,y_i-y_j))\ =max((x_j + y_j) - (x_i + y_i),(x_j - y_j)-(x_i,y_i)) ]

    由上面的变形

    • 求各个 ((i,j))((x_j + y_j) - (x_i + y_i)) 的最大值
    • 求各个 ((i,j))((x_j - y_j) - (x_i - y_i)) 的最大值

    所以再回到上面:(max(M_1-m_1,M_2-m_2)) 正是答案

    • (mathcal{O}(N)),但由于用了 sort 时间复杂度为 (mathcal{O}(NlogN))
    int main() {
        ios_base::sync_with_stdio(false), cin.tie(0);
        int n;
        cin >> n;
        vector<int> a, b;
        for (int i = 0, x, y; i < n; ++i) {
            cin >> x >> y;
            a.emplace_back(x + y);
            b.emplace_back(x - y);
        }
        sort(a.begin(), a.end());
        sort(b.begin(), b.end());
        cout << max(a[n - 1] - a[0], b[n - 1] - b[0]);
        return 0;
    }
    

    The desire of his soul is the prophecy of his fate
    你灵魂的欲望,是你命运的先知。

  • 相关阅读:
    IE8上传插件jquery-form.js上传请求参数设置type为post失效问题
    路径参数汉字兼容问题
    vue-cli2移动端适配
    事件委托原生、jQuery实现
    new Date()在移动端的问题
    create-react-app配置less
    删除左右两边空格
    日期转换
    Git 常用命令
    单页面应用
  • 原文地址:https://www.cnblogs.com/RioTian/p/14623833.html
Copyright © 2020-2023  润新知