AT4160 [ARC099A] Minimization 题解
题目传送门
思路
对于这道题,读入的 \(a\) 数组最终肯定会变成 \(1\)。
\(\because\) 读入的是 \(1 \sim n\),最小值是 \(1\)。
\(\therefore\) \(a\) 数组最终肯定会变成 \(1\)。
按照最优决策
每次推平一定在 \(1\) 的最边边,扩展时变为 \(1\) 的元素数量为 \(k - 1\) 个。
\(\because\) 一开始已经有一个 \(1\) 了,
\(\therefore\) 答案即为 \(\lceil\ (n - 1)\ \div\ (k - 1)\ \rceil\)
代码如下:
#include <stdio.h>
#include <cmath>
int n, k;
main () {
scanf ("%d %d", &n, &k) ;
printf ("%d", (int) (ceil ( (n - 1) * 1.0 / (k - 1) ) ) ) ;
}