3.08 笔试第二题:分别排序+二分,只过了25的样例,有没有佬帮看看为啥
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int n = in.nextInt();
int[][] paos = new int[n][2];
Map> hmx = new HashMap<>();
Map> hmy = new HashMap<>();
for (int i = 0; i < n; i++) {
paos[i][0] = in.nextInt();
int x = paos[i][0];
paos[i][1] = in.nextInt();
int y = paos[i][1];
if (!hmx.containsKey(x)) {
hmx.put(x,new ArrayList<>());
}
if (!hmy.containsKey(y)) {
hmy.put(y,new ArrayList<>());
}
hmx.get(x).add(y);
hmy.get(y).add(x);
}
hmx.forEach((k,v)->{
Collections.sort(v);
// System.out.println(v);
});
hmy.forEach((k,v)->{
Collections.sort(v);
// System.out.println(v);
});
for (int[] pao : paos) {
int x = pao[0];
int y = pao[1];
int res = 0;
List tx = hmx.get(x);
List ty = hmy.get(y);
int len1 = tx.size();
int len2 = ty.size();
int index1 = 0;
int index2 = 0;
index1 = bsearch(tx,y);
index2 = bsearch(ty,x);
if ( index1 - 1 > 0) res++;
if (index1 != -1 &&len1-2-index1 >0)res++;
if(index2-1>0)res++;
if(index2 != -1 &&len2-2-index2>0)res++;
System.out.println(res);
}
}
private static int bsearch(List list,int num) {
int len = list.size();
int left = 0, right = len - 1;
while (left <= right) {
int mid = left + (right-left)/2;
if (list.get(mid) == num) {
return mid;
} else if (list.get(mid) < num) {
left = mid + 1;
} else {
right = mid -1;
}
}
return -1;
}
}
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int n = in.nextInt();
int[][] paos = new int[n][2];
Map
Map
for (int i = 0; i < n; i++) {
paos[i][0] = in.nextInt();
int x = paos[i][0];
paos[i][1] = in.nextInt();
int y = paos[i][1];
if (!hmx.containsKey(x)) {
hmx.put(x,new ArrayList<>());
}
if (!hmy.containsKey(y)) {
hmy.put(y,new ArrayList<>());
}
hmx.get(x).add(y);
hmy.get(y).add(x);
}
hmx.forEach((k,v)->{
Collections.sort(v);
// System.out.println(v);
});
hmy.forEach((k,v)->{
Collections.sort(v);
// System.out.println(v);
});
for (int[] pao : paos) {
int x = pao[0];
int y = pao[1];
int res = 0;
List
List
int len1 = tx.size();
int len2 = ty.size();
int index1 = 0;
int index2 = 0;
index1 = bsearch(tx,y);
index2 = bsearch(ty,x);
if ( index1 - 1 > 0) res++;
if (index1 != -1 &&len1-2-index1 >0)res++;
if(index2-1>0)res++;
if(index2 != -1 &&len2-2-index2>0)res++;
System.out.println(res);
}
}
private static int bsearch(List
int len = list.size();
int left = 0, right = len - 1;
while (left <= right) {
int mid = left + (right-left)/2;
if (list.get(mid) == num) {
return mid;
} else if (list.get(mid) < num) {
left = mid + 1;
} else {
right = mid -1;
}
}
return -1;
}
}
全部评论
没看出啥问题
相关推荐