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));
}
}