Loading

[每日 C] Subtract Min Sort

前言

按照一般理性, \(\textrm{div 3}\)\(\rm{D}\) 符合每日 \(\rm{C}\) 的难度

思路

\(\sout{\rm{greedy}}\)

转化一下操作

选择 \(i \in [1, n)\) , 删除 \(a_i, a_{i + 1}\) 中较小的那一个, 并将较大的哪一个减掉较小的那一个

最后要求我们搞出一个 单调不降 的序列

先玩几组样例看性质

考虑一个弱智贪心
你每次从前往后试图进行操作, 如果满足了就不管, 否则继续往下操作
看上去可以过样例, 打一份试试

代码

#include <bits/stdc++.h>
const int MAXN = 2e5 + 20;

int n;
int a[MAXN];

int main()
{
    int t; scanf("%d", &t);
    while (t--) {
        scanf("%d", &n);
        for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
        for (int i = 1; i < n; i++) { int c = std::min(a[i], a[i + 1]); a[i] -= c, a[i + 1] -= c; }
        bool flag = true; for (int i = 1; i < n; i++) if (a[i]) { flag = false; printf("NO\n"); break; }
        if (flag) printf("YES\n");
    }

    return 0;
}

总结

\(\rm{tm}\)\(\textrm{div 2}\) \(\rm{C}\) 难度我吃

posted @ 2025-01-20 08:26  Yorg  阅读(30)  评论(0)    收藏  举报