給定 k 個字母,每字母 p 個坐標點。要求將同字母的點包裹在一個矩形內,判斷所有字母的矩形能否兩兩不重疊(邊界接觸算重疊)。
left, right, up, down(最小/最大 x, y)。if(L[i] > L[j] && L[i] < R[j]) L[i] = L[j]; 等四方向。(L[j] in [L[i], R[i]] || R[j] in [L[i], R[i]]) && (U[j] in [U[i], D[i]] || D[j] in [U[i], D[i]])NO,否則 YES。#define INF 1000000000
int L[27], R[27], U[27], D[27];
bool check(int n) {
for(int i=0; i=L[i] && L[j]<=R[i]) || (R[j]<=R[i] && R[j]>=L[i]);
bool yOverlap = (U[j]>=U[i] && U[j]<=D[i]) || (D[j]<=D[i] && D[j]>=U[i]);
if(xOverlap && yOverlap) return false;
}
return true;
}
int main() {
int T, k, p, x, y;
scanf("%d", &T);
while(T--) {
scanf("%d%d", &k, &p);
for(int i=0; i L[j] && L[i] < R[j]) L[i] = L[j];
if(R[i] < R[j] && R[i] > L[j]) R[i] = R[j];
if(U[i] > U[j] && U[i] < D[j]) U[i] = U[j];
if(D[i] < D[j] && D[i] > U[j]) D[i] = D[j];
}
puts(check(k) ? "YES" : "NO");
}
return 0;
}
x 向右,y 向下(題目圖示一致)。= 判斷包含)。INF 足夠大(> 最大坐標)。