Codeforces Round #609 (Div. 2) C. Long Beautiful Integer

题目链接
题意是给定长为n的整数x,然后需要你找到不小于n并且这个数的第i位等于i+k最小的数。
很明显,可以通过把当前数x的前k位,当做循环节,查看形成的数是否大于数x,如果小于,只需把循环节加上1就能够保证形成的数大于x了,小于输出就行,这里要注意是末尾为9的时候,要有进位,当然不会出现循环节全是9加一的情况,因为全是9的形成的数一定不会小于x的。
java大数异常方便,直接加一(手动狗头)
AC代码

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
 
public class Main {
    static StreamTokenizer st = new StreamTokenizer(new BufferedInputStream(System.in));
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static PrintWriter pr = new PrintWriter(new BufferedOutputStream(System.out));
    static Scanner sc = new Scanner(System.in);
 
    public static void main(String[] args) {
//        long tic = System.currentTimeMillis();
        int n = sc.nextInt();
        int k = sc.nextInt();
        String s = sc.next();
        String s2 = s.substring(0,k);
        boolean flag = true;
        for(int i = k;i<n;i++) &#123;
            if(s.charAt(i)<s2.charAt((i)%k)) &#123;
                break;
            &#125;else if(s.charAt(i)>s2.charAt((i)%k)) &#123;
                flag = false;
                break;
            &#125;
        &#125;
        StringBuffer sb = new StringBuffer();
        if(flag) &#123;
            for(int i = 0;i<n;i++) &#123;
                sb.append(s2.charAt(i%k));
            &#125;
        &#125;else&#123;
            String s3 = new BigInteger(s2).add(new BigInteger("1")).toString();
            for(int i = 0;i<n;i++) &#123;
                sb.append(s3.charAt(i%k));
            &#125;
        &#125;
        System.out.println(sb.length());
        System.out.println(sb);
        
//        long toc = System.currentTimeMillis();
//        System.out.println("Elapsed time: " + (toc - tic) + " ms");
    &#125;
    private static long A(long n, long k, long mod) &#123;
        long jcn = n;
        for (int i = 1; i < k; i++) &#123;
            jcn *= (n - i);
            jcn %= mod;
        &#125;
        return jcn;
    &#125;
 
    private static long C(long n, long k, long mod) &#123;
        long jcn = n;
        long jck = 1;
        for (int i = 1; i < k; i++) &#123;
            jcn *= (n - i);
            jcn %= mod;
            jck *= i;
            jck %= mod;
        &#125;
        jck *= k;
        jck %= mod;
        return jcn * pow(jck, mod - 2, mod) % mod;
    &#125;
 
    static long pow(long a, long b, long mod) &#123;
        long result = 1;
        while (b > 0) &#123;
            if (b % 2 == 1) &#123;
                result = (result * a) % mod;
            &#125;
            a = (a * a) % mod;
            b /= 2;
        &#125;
        return result;
    &#125;
 
    static int nextInt() &#123;
        try &#123;
            st.nextToken();
        &#125; catch (IOException e) &#123;
            e.printStackTrace();
        &#125;
        return (int) st.nval;
    &#125;
 
    static double nextDouble() &#123;
        try &#123;
            st.nextToken();
        &#125; catch (IOException e) &#123;
            e.printStackTrace();
        &#125;
        return st.nval;
    &#125;
 
    static String next() &#123;
        try &#123;
            st.nextToken();
        &#125; catch (IOException e) &#123;
            e.printStackTrace();
        &#125;
        return st.sval;
    &#125;
 
    static long nextLong() &#123;
        try &#123;
            st.nextToken();
        &#125; catch (IOException e) &#123;
            e.printStackTrace();
        &#125;
        return (long) st.nval;
    &#125;
&#125;

   转载规则


《Codeforces Round #609 (Div. 2) C. Long Beautiful Integer》 xfx 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
 项目挣值分析法 项目挣值分析法
项目挣值分析法又称为赢得值法或偏差分析法,挣得值分析法是在工程项目实施中使用较多的一种方法,是对项目进度和成本进行综合控制的一种有效方法。挣值分析法是采用统计学的方法,经常及时分析项目成本的状况,尽早地预测和发现项目成本差异与问题,努力在情
2020-02-11
下一篇 
Codeforces Round #609 (Div. 2) B. Modulo Equality Codeforces Round #609 (Div. 2) B. Modulo Equality
题目链接题意是给两个数列,问使数列一的所有数加上一个正整数,然后模于m后能变成数列二。这题主要排序后暴力即可,由于被hack了,所有总结下出现的错误。这里要注意: 一个数ans如果满足条件那么m-ans 也可能满足条件。注意只是可能 如果
2019-12-22
  目录