序列最小化题解

序列最小化

https://ac.nowcoder.com/acm/contest/5556/C

思路:贪心
这道题没什么太难的地方,因为是1-n的序列,所以最后肯定是都变为1.
那我们首先需要找1的位置,然后判断把左右都变为1需要多少次。
首先把左边的元素个数/(k-1),因为每次也要把1包含进去,所以要-1.
然后我们通过((k-1)-p%(k-1))%(k-1)计算需要移动的位置。
%(k-1)是为了防止1在首位。
然后再判断右边需要变化的次数即可。
import java.util.*;
import java.math.*;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.io.OutputStreamWriter;
import java.io.BufferedReader;
import java.io.PrintWriter;
public class Main {
    public static void main(String args[])throws IOException {
        StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        in.nextToken();
        int n = (int) in.nval;
        in.nextToken();
        double k = (int) in.nval;
        int num[] = new int[n];
        int p=0;
        if(n==k)
            out.print(1);
        else
        {
        for(int i=0;i<n;i++)
        {
            in.nextToken();
            num[i] = (int) in.nval;
            if(num[i]==1)
                p = i;
        }
        double q=0,o=0;
        double sum=0;
        sum += Math.ceil(p/(k-1));
        q = ((k-1)-p%(k-1))%(k-1);
        sum += Math.ceil((n-1-p-q)/(k-1));
        out.println((long)sum);
        }
        out.flush();
 
    }
}


全部评论

相关推荐

头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
尊尼获获:闺蜜在哪?
点赞 评论 收藏
分享
联通 技术人员 总包不低于12
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务