模擬圖形界面窗口點擊置頂邏輯:N 個矩形窗口 (底層→頂層),M 次點擊。點擊位置屬於多個窗口時,選中最頂層窗口並移至最頂層;無窗口則輸出 IGNORED。N, M ≤ 10,座標 ≤ 2559/1439。
Window 存儲座標與層級 floor (1..N)。>= <=)。floor,將該窗口移至數組末尾 (頂層),中間窗口前移,break。邏輯無誤,樣例輸出匹配。
bool 類型struct CLICK {
int x;
int y;
bool flag; // 錯誤!C89/C99 標準無 bool
} c[M];
後果: 編譯器 (如 GCC 默認模式) 將 bool 視為未聲明標識符或報錯,導致編譯失敗 (CE),OJ 判 0 分。
int 代替 (最兼容)struct CLICK {
int x;
int y;
int flag; // 0 = false, 1 = true
} c[M];
// 使用時
c[i].flag = 0;
// ...
c[i].flag = 1;
if (c[i].flag == 0) ...
<stdbool.h> (C99 標準)#include <stdbool.h> // 頂部包含
struct CLICK {
int x;
int y;
bool flag; // 現在合法了
} c[M];
注意: 部分老舊 OJ 編譯環境可能不支持 C99 或默認不開啟,方案一最保險。
x1 < x2, y1 < y2,直接用 >= && <= 正確。W[10], c[10] 足夠,VLA (Variable Length Array) W[N] 在 C99 合法但部分編譯器不支持,建議定義最大常量 #define MAX_N 10。scanf 返回值檢查非必需,但加上更健壯。算法邏輯正確,僅因 C 語言標準差異導致 bool 編譯失敗。競賽中**默認使用 int 表示布爾值**是避免此類低級錯誤的鐵律。