5.16 每日一题题解

序列最小化

涉及知识点:

  • 贪心

solution:

  • (给出的数字是1到n的排列,所以最终每个数字一定都是1)
  • (对于除了1的n-1个数,如何用最少的次数让他们都变成1)
  • (每次变换,我们至多可以选择和1相邻的k-1个数)
  • (其实就相当于总共n-1个数,每次可选择k-1个数变成1,问你最少次数)
  • (答案就是frac{n-1}{k-1}的上取整)

std:

#include <bits/stdc++.h>
using namespace std;
#define ll long long 
int main()
{
    int n,k,x;
    cin>>n>>k;
    for(int i=1;i<=n;i++)
        cin>>x;
    int ans = (n-1)/(k-1);
    if((n-1)%(k-1) != 0)
        ans++;
    cout<<ans<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/QFNU-ACM/p/12898842.html