题目描述
有一个长度为N的序列。一开始,这个序列是1, 2, 3,... n - 1, n的一个排列。
对这个序列,可以进行如下的操作:
每次选择序列中k个连续的数字,然后用这k个数字中最小的数字替换这k个数字中的每个数字。
我们希望进行了若干次操作后,序列中的每个数字都相等。请你找出需要操作的最少次数。
思路
因为是全排列吧,所以一定有数字1,那么第一次选择的k个内肯定包含有一个1,那么剩下k-1个就都变成了1,同理,一直操作即可。
那么n个数,有一个1了,还有n-1个需要变成1,每次最多可以让k-1个变成1,所以答案就是
#include<bits/stdc++.h> using namespace std; int main(){ int n,k;cin>>n>>k; int q=ceil(1.0*(n-1)/(1.0*k-1)); cout<<q; return 0; }