在CF官网提交很多次了,都过不去。
#include<bits/stdc++.h>
using namespace std;
int main() {
int a;
long long x[1005],y[1005],x1[1005],y1[1005];
scanf("%d",&a);
for(int i = 1;i <= a;i++) {
scanf("%11d%11d%11d%11d",&x[i],&y[i],&x1[i],&y1[i]);
}
int f = a;
while(f - 1) {
bool k = true;
for(int i = 2;i <= a;i++) {
for(int j = 1;j < i;j++) {
if(x[i] == 0 and y[i] == 0 and x1[i] == 0 and y1[i] == 0) {
break;//退出整个j的循环
}
if(x[j] == 0 and y[j] == 0 and x1[j] == 0 and y1[j] == 0) {
continue;
}
if(x[i] == x[j] and y[i] == y1[j] and x1[i] == x1[j]) {//判断两个是否属于同一列且相邻
if(y[i] > y[j]) {
y[i] = y[j];
}
if(y1[i] < y1[j]) {
y1[i] = y1[j];
}
x[j] = 0 ;
y[j] = 0;
x1[j] = 0;
y1[j] = 0;
f--;
k = false;
continue;
}
if(y[i] == y[j] and x[i] == x1[j] and y1[i] == y1[j]) {//判断两个是否属于同一行且相邻
if(x[i] > x[j]) {
x[i] = x[j];
}
if(x1[i] < x1[j]) {
x1[i] = x1[j];
}
x[j] = 0 ;
y[j] = 0;
x1[j] = 0;
y1[j] = 0;
f--;
k = false;
}
}
}
if(k) {//如果没发生合并,退出循环
printf("NO\n");
return 0;
}
}
printf("YES\n");//否则输出yes
}