3.20 拼多多笔试

前三题A,第四题不会,特例通过16%
第一题,数组排序后直接求解即可
public class PDD_01 {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int[] a=new int[n];
        int[] b=new int[n];
        for(int i=0;i<n;i++) a[i]=in.nextInt();
        for(int i=0;i<n;i++) b[i]=in.nextInt();
        System.out.println(minSum(a,b));

    }
    public static long minSum(int[] a,int[] b){
        Arrays.sort(a);
        Arrays.sort(b);
        long sum=0;
        for(int i=0;i<a.length;i++){
            sum+=(a[i]-b[i])*(a[i]-b[i]);
        }
        return sum;
    }

}
第二题 贪心+排序 注意题目要求
public class PDD_02 {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int T=in.nextInt();
        for(int i=0;i<T;i++){
            int n=in.nextInt();
            int v=in.nextInt();
            int[][] lemons=new int[n][3];
            for(int j=0;j<n;j++){
                for(int k=0;k<3;k++)
                    lemons[j][k]=in.nextInt();
            }

            System.out.println(maxCollection(lemons, v));
        }

    }
    public static int maxCollection(int[][] lemons,int maxCollect){
        Arrays.sort(lemons, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[2]!=o2[2]) return o1[2]-o2[2];
                else return o1[1]-o2[1];
            }
        });
        int maxDay=lemons[lemons.length-1][2];
        int lemonCount=0;
        int collect;
        for(int i=0;i<maxDay;i++){
            int day=i+1;
            collect=maxCollect;
            for(int[] lemon:lemons){
                if(lemon[0]<=0) continue;
                if(lemon[1]>day) continue;
                if(day>lemon[2]) continue;
                if(lemon[0]>=collect) {
                    lemon[0]-=collect;
                    lemonCount+=collect;
                    break;
                }
                else{
                    lemonCount+=lemon[0];
                    collect-=lemon[0];
                    lemon[0]=0;
                }


            }
        }
        return lemonCount;



    }

}
第三题 最开始也只通过了38% 是因为没有考虑到特例,
为了保证字典序最小,默认a i+k为1,三种特殊情况
1.i+k越界
2.b i+2k 为0
3.a i-k已经为1了
这三种情况下,设置a i-k为1 
public class PDD_03 {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int k=in.nextInt();
        in.nextLine();
        String s=in.nextLine();
        char[] A=new char[s.length()];
        for(int i=0;i<s.length();i++) A[i]='0';
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)=='1'){
                if(i+k>=s.length()) A[i-k]='1';
                else if(i+2*k<s.length()&&s.charAt(i+2*k)=='0') A[i-k]='1';
                else if(i-k>=0&&A[i-k]=='1') ;
                else A[i+k]='1';
            }
        }
        System.out.println(String.copyValueOf(A));
    }
}




#拼多多笔试##拼多多##笔经#
全部评论
请问一下第三题的第2个特例:“2.b[i+2k] 为0”是为什么呢
点赞 回复 分享
发布于 2022-03-21 10:34
老哥,第三题第2中情况b(i+2k)=0是什么意思?
点赞 回复 分享
发布于 2022-03-21 10:57

相关推荐

4 13 评论
分享
牛客网
牛客企业服务