EF Java题解,代码已去除冗余~~~

E 小彩的数组构造

容易知道,数组的长度一定为a+2,且b和c不大于a,,那么不妨初始化答案数组为全2,此时全部长度为3子数组都能整除2或者3,其次子数组位置在b和c之间数字从前到后通过自加,调整到和能整除3且不整除2(或者相反),再把b和c位置后边的数字调整成为既不整除2也不整除3,每个位置最多自加5次,时间复杂度O(5a)

import java.util.*;
public class Main{
    public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt(),b=sc.nextInt(),c=sc.nextInt(),ans[]=new int[a+2];
        if(Math.max(b,c)>a){
            System.out.println(-1);
        }
        else{
            Arrays.fill(ans,2);
            for(int i=b+2;i<c+2;i++){
                while((ans[i]+ans[i-2]+ans[i-1])%2==0||(ans[i]+ans[i-2]+ans[i-1])%3!=0){
                    ans[i]++;
                }
            }
            for(int i=c+2;i<b+2;i++){
                while((ans[i]+ans[i-2]+ans[i-1])%3==0||(ans[i]+ans[i-2]+ans[i-1])%2!=0){
                    ans[i]++;
                }
            }
            for(int i=Math.max(b,c)+2;i<a+2;i++){
                while((ans[i]+ans[i-2]+ans[i-1])%3==0||(ans[i]+ans[i-2]+ans[i-1])%2==0){
                    ans[i]++;
                }
            }
            System.out.println(a+2);
            for(int p:ans){
                System.out.print(p+" ");
            }
        }
    }
}

F 小彩的好数构造

当n小于4的时候,用尝试法求答案;而在n大于等于4的时候,可以构造长度为n的:“1000...001”以及“213131313....3121”,时间复杂度O(n)

import java.util.*;
public class Main{
    public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        if(n<4){
            System.out.println(n==1?"-1":n==2?"11 12":"143 861");
        }
        else{
            System.out.print(1);
            for(int i=0;i<n-2;i++){
                System.out.print(0);
            }
            System.out.print("1 21");
            for(int i=0;i<n-4;i++){
                System.out.print(i%2==0?3:1);
            }
            System.out.println(21);
        }
    }
}