仍是wrong answer。放在这方便多平台看。
Source Code
import java.util.Scanner;
import java.util.*;
import java.math.*;
import java.lang.*;
public class Main {
static class Pair{
int x;
int y;
int ch;
};
/**
* @param args
*/
public static void main(String[] args) {
int n;
Pair side[][] = new Pair[27][2];
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
int k,p;
int inputX=0,inputY=0;
while(n--!=0){
k = scanner.nextInt();
p = scanner.nextInt();
for(int i=0;i!=k; ++i){
side[i][0] = new Pair();
side[i][1] = new Pair();
side[i][0].x=1000002; //min
side[i][0].y=1000002;
side[i][1].x=-1; //max
side[i][1].y=-1;
}
for(int i=0;i!=k;++i){
for(int j=0;j!=p;++j){
inputX = scanner.nextInt();
inputY = scanner.nextInt();
if(side[i][0].x>inputX){
side[i][0].x = inputX;
}
if(side[i][0].y>inputY){
side[i][0].y = inputY;
}
//是否更换最大值
if(side[i][1].x<inputX){
side[i][1].x = inputX;
}
if(side[i][1].y<inputY){
side[i][1].y = inputY;
}
}
side[i][0].ch = side[i][1].ch=i;
}
//输入结束
//排序
sortX(side, k, 0);
boolean split[][]=new boolean[27][27]; //true 表示有冲突
for(int i=0;i!=k-1;++i){
for(int j=i+1;j!=k;++j){
if(side[j][0].x<=side[i][1].x){
split[side[i][0].ch][side[j][0].ch]=true;
split[side[j][0].ch][side[i][0].ch]=true;
}else{
// break;
}
}
}
sortY(side, k, 0);
//中间斜线
for(int i=0;i!=k;++i){
split[i][i]=false;
}
for(int i=0;i!=k-1;++i){
for(int j=i+1;j!=k;++j){
if(side[j][0].y>side[i][1].y){
split[side[i][0].ch][side[j][0].ch]=false;
split[side[j][0].ch][side[i][0].ch]=false;
}
}
}
int result = 0;
for(int i=0;i!=k-1;++i){
for(int j=0;j!=k;++j){
if(split[i][j]){
result = 1;
break ;
}
}
if(result!=0){
break;
}
}
if(result==1){
System.out.println("NO");
}else{
System.out.println("YES");
}
}
}
public static void sortX(Pair[][] p,int n,int type){
for(int i=0;i!=n;++i){
int index = i;
for(int j=i+1;j!=n;++j){
if(p[j][type].x<p[index][type].x){
index = j;
}
}
if(index!=i){
Pair temp = p[index][0];
p[index][0] = p[i][0];
p[i][0] =temp;
temp = p[index][1];
p[index][1] = p[i][1];
p[i][1] =temp;
}
}
}
/**
*
* @param p
* @param n
* @param type
*/
public static void sortY(Pair[][] p,int n,int type){
for(int i=0;i!=n;++i){
int index = i;
for(int j=i+1;j!=n;++j){
if(p[j][type].y<p[index][type].y){
index = j;
}
}
if(i!=index){
Pair temp = p[index][0];
p[index][0] = p[i][0];
p[i][0] =temp;
temp = p[index][1];
p[index][1] = p[i][1];
p[i][1] =temp;
}
}
}
}