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

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
评论
4
13
分享
牛客网
牛客企业服务