首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

BestCoder Round #54 題解匯總:排序、因子、等比數列、幾何反射

     編輯:關於C++

A. HDU 5427 排序問題

按字符串後的數字降序排序,輸出原字符串。關鍵:解析字符串提取數字,結構體存儲原串與數字,sort 自定義比較器。

B. HDU 5428 最小因子乘積

求所有輸入數的質因數集合,輸出最小兩個質因子乘積。若質因子不足兩個輸出 -1。試除法分解每個數,收集質因子,排序取前兩個。

C. HDU 5429 等比數列判斷

判斷序列是否為等比數列。處理 0 值邊界:全 0 為等比;含 0 非全 0 需特殊判斷。用 BigInteger 避免溢出,檢查 a[i]*a[i] == a[i-1]*a[i+1]。

D. HDU 5430 幾何反射問題

核心洞見:光線在兩平行鏡面間反射,等價於鏡像展開後的直線傳播。答案為 φ(n+1) (歐拉函數) 或通過動態規劃/數論推導。代碼展示了兩種解法:篩法預計算 φ 和直接 gcd 計數。

關鍵代碼片段 (HDU 5430 解法二:gcd 計數)

int gcd(int a, int b) { return b ? gcd(b, a%b) : a; }
int main() {
    int T, n; scanf("%d", &T);
    while (T--) {
        scanf("%d", &n);
        int ans = 0;
        for (int i = 1; i <= n; ++i)
            if (gcd(i, n+1) == 1) ans++;
        printf("%d\n", ans);
    }
}

總結

本場比賽涵蓋排序、數論、大數、幾何/數論轉化四類經典題型。HDU 5430 最具技巧性,展示了「物理反射 → 數論歐拉函數」的優美轉化,值得深入體會。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved