while(nm--) { cin >> ptr[i]; ++i; }
sort(ptr, ptr + nm); // nm 此時為 -1 (或 0)
循環 `while(nm--)` 將 `nm` 遞減至 **-1** (或 0,視初始值)。隨後 `sort(ptr, ptr + nm)` 傳入負長度/零長度,導致未定義行為 (段錯誤)。
int count = n * m;
int *ptr = new int[count];
for (int i = 0; i < count; ++i) cin >> ptr[i];
sort(ptr, ptr + count); // 使用原始 count
// ... 後續邏輯
delete[] ptr;
int n, m, k;
while (cin >> n >> m >> k) {
if (n < 1 || n > 10 || m < 1 || m > 100 || k < 1 || k > n * m) break;
vector a(n * m);
for (int &x : a) cin >> x;
nth_element(a.begin(), a.begin() + k - 1, a.end()); // O(N) 找第 k 小,比全排序快
cout << "Scenario #" << set++ << "\n" << a[k-1] << "\n";
}