三類學生(1 程式、2 數學、3 體育),組隊需三類各一。貪心:統計三類人數,最小值即最大隊數。按輸入順序依次分配索引。
int cnt[4] = {}, id[4][5005];
for (i=1; i<=n; i++) {
scanf("%d", &x);
id[x][++cnt[x]] = i;
}
int teams = min(cnt[1], min(cnt[2], cnt[3]));
printf("%d\n", teams);
for (i=1; i<=teams; i++)
printf("%d %d %d\n", id[1][i], id[2][i], id[3][i]);
還原隊列順序。給定 n 對 (u, v) 表示 u 在 v 前面。構建 next[u]=v 與入度。偶數位從 0 開始鏈接,奇數位從入度為 0 的節點開始。
// 構建 next 與 in-degree for (i=0; iC. Hacking Cypher
字符串分成兩段,前段能被
a整除,後段能被b 整除,且後段無前導零。預處理前綴模a、後綴模b(利用10^k mod b)。// 預處理 10^k % b pow10[0] = 1 % b; for (i=1; i<=len; i++) pow10[i] = (pow10[i-1] * 10) % b; // 前綴模 a for (i=0; i=0; i--) suf[i] = (s[i]-'0') * pow10[len-1-i] + suf[i+1]) % b; // 枚舉分割點 for (i=0; i D. Chocolate
兩塊巧克力
a1×b1,a2×b2。操作:面積減半(去掉因子 2),或 2/3 面積(因子 3 變 2)。目標面積相等且操作數最少。分解 2、3 的指數,貪心對齊指數。// 計算面積的 2、3 指數 // 先讓 3 的指數相等(多的轉 2),再讓 2 的指數相等(多的除 2) // 最後檢查剩餘面積(去掉 2、3 因子後)是否相等E. Restoring Increasing Sequence
字符串含數字與
?,替換?使序列嚴格遞增。貪心:從左到右,每個數取比前一個大的最小可能值。模擬比較長度、逐位填充。總結
題目 核心技巧 難點 A 計數貪心 輸出任意合法分配 B 鏈表重構 奇偶位分離邏輯 C 模運算+預處理 後綴模計算技巧 D 質因數分解貪心 操作語義轉化為指數調整 E 字符串貪心構造 邊界情況處理繁瑣 本場比賽考察基礎演算法靈活應用,代碼實現細節決定成敗,適合練習競賽型思維。