[每日 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}\) 难度我吃

浙公网安备 33010602011771号