算法题1
给出长方形的六个面的长和宽,问是否能拼成长方形,能就输出“POSSIBLE”,不能就“IMPOSSIBLE”
考完就知道为啥我过了80 了,考虑了两个两个相等,但没考虑 两个两个相等但是想临边得相等,忘了
我的代码:
package jindong;
import java.util.*;
public class test1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
while(n-->0) {
int[][] num=new int[6][2];
for(int i=0;i<6;i++) {
num[i][0]=sc.nextInt();
num[i][1]=sc.nextInt();
Arrays.sort(num[i]);
}
Arrays.sort(num,new Comparator<int[]>() {
public int compare(int[] a,int[] b) {
if(a[0]!=b[0])return a[0]-b[0];
else return a[1]-b[1];
}
});
String s=solution(num);
System.out.println(s);
}
}
private static String solution(int[][] num) {
if(num[0][0]<1 || num[0][1]<1) return "IMPOSSIBLE";
for(int i=1;i<6;i+=2) {
if(num[i][0]<1 || num[i][1]<1) return "IMPOSSIBLE";
if(num[i-1][0]!=num[i][0]) {
return "IMPOSSIBLE";
}
if(num[i-1][1]!=num[i][1]) {
return "IMPOSSIBLE";
}
System.out.println(i);
}
System.out.println();
return "POSSIBLE";
}
}
算法题2
我的解法只是找到严格包含关系的一对就总数-2,只过了33
package jindong;
import java.util.*;
public class test2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[][] num=new int[n][2];
for(int i=0;i<n;i++) {
num[i][0]=sc.nextInt();
num[i][1]=sc.nextInt();
}
int res=solution(num,n);
System.out.println(res);
}
private static int solution(int[][] num,int n) {
int res=n;
Arrays.sort(num,new Comparator<int[]>() {
public int compare(int[] a,int[] b) {
if(a[0]!=b[0])return a[0]-b[0];
else return a[1]-b[1];
}
});
// for(int i=0;i<n-1;i++) {
int cur1=num[0][0],cur2=num[0][1];
for(int j=1;j<n;j++) {
if(num[j][0]>cur1 && num[j][1]<cur2) {
res-=2;
num[j][0]=Integer.MIN_VALUE;
num[j][1]=Integer.MAX_VALUE;
}
}
// System.out.println(res);
// }
return res;
}
}