<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      2025-10-28 aoao Round 比賽總結

      比賽鏈接

      比賽時的狀態(tài) be like:

      • 我靠,這題怎么這么難?T1 就開始上難度了?
      • 沒一道題會寫,不會要爆零然后遺憾離場了吧?
      • (想了 2147483647 種 T1 的假做法)
      • (去體檢,在測血壓時)等會,我好像想明白 T1 的本質了……
      • (回機房)秒切 T1!
      • 開 T2!也不難,想一想就會了!
      • 看來這場比賽也就那樣嘛!向著 T3 進發(fā)!
      • 不是哥們這是什么東西啊……
      • 6 點,遺憾離場。

      可以說是大起大落了。不過還好,最后拿到了最近久違的兩個 AC。

      T1

      可以想到,假如一個子串(可以為空)兩邊的字符相同,那么翻轉這個子串,或者翻轉帶上兩邊字符的子串,得到的字符串完全相同。

      進一步思考,加入我們有一個字符串形如 a#*&a~-^aa 中間的是任意的字符),那么 a#*&aa-^aa#*&a~-^a 就會被重復計算。歸納可得,設字符串中某個字符出現了 \(n\) 次,那么重復計算的次數就是 \(\frac{(1 + n) n}{2}\) ——對于每個字母都是同理的。

      所以,我們統(tǒng)計每個字母的出現次數(別忘了英文字母有 \(26\) 個啊喂——不然小心 10 pts),然后設字符串長度為 \(l\),那么最終答案就是 \(\frac{(1+n)n}{2} + \sum_{i = 1}^{26}\frac{(1+n_i)n_i}{2}\)

      #include <bits/stdc++.h>
      #define int long long
      typedef long long ll;
      const int N = 1e5+10;
      ll ans;
      std::string str;
      int times[30];
      
      signed main() {
        freopen("spring.in", "r", stdin);
        freopen("spring.out", "w", stdout);
        std::cin >> str;
        int n = str.size();
        str = " " + str;
        for (int i = 1; i <= n; i++) {
          times[str[i] - 'a' + 1]++;
        }
        ans = (1 + n) * n / 2;
        for (int i = 1; i <= 26; i++) {
          ans -= (1 + times[i]) * times[i] / 2;
        }
        std::cout << ans + 1 << '\n';
        return 0;
      }
      

      T2

      首先,如果 \(a_1\) 被修改,那么就無可救藥了,因為根據規(guī)則,顯然 \(a_1\) 必須為 \(0\)。此外,如果 \(a_i\) 被修改,那么下標為 \(i\) 的因數和倍數的地方要受牽連。進一步分析可得,\(i\) 的最大的質因數的所有倍數都要被修改(\(i\) 本身除外)。可以用試除法對 \(i\) 分解質因數,時間復雜度 \(O(\sqrt{n})\)

      #include <bits/stdc++.h>
      typedef long long ll;
      const int N = 1e5+10;
      int n, q;
      
      int getMaxFactor(int x) {
        int ans = 0;
        for (int i = 2; i <= std::sqrt(x); i++) {
          while (x % i == 0) {
            ans = std::max(ans, i);
            x /= i;
          }
        }
        if (x > 1) {
          ans = std::max(ans, x);
        }
        return ans;
      }
      
      signed main() {
        freopen("summer.in", "r", stdin);
        freopen("summer.out", "w", stdout);
        std::cin >> n >> q;  
        while (q--) {
          int x;
          std::cin >> x;
          if (x == 1) {
            std::cout << "-1\n";
            continue;
          }
          int maxFactor = getMaxFactor(x);
          int ans = n / maxFactor - 1;
          std::cout << ans << '\n';
        }
        return 0;
      }
      

      T3

      這題正解太難了,這里只討論可以得 50 pts 的反悔貪心做法。(aoao 太強了!)

      設處理第 \(i\) 個位置的糖果需要的費用為 \(V_i\),分多、少兩種情況討論:

      1. 若少了,既可以花 \(X\) 費用解決,即 \(V_i = X\),還可以向前面位置為 \(j\) 處要糖果,花費 \(Z|i-j|\) 費用,并且還要把之前的糖的貢獻減去,總費用為 \(Z|i-j|-V_j\),所以 \(V_i = \min(X, Z|i-j|-V_j)\)
      2. 若多了,同理,\(V_i = \min(Y, Z|i-j|-V_j)\)

      此時時間復雜度是 \(O(n^2)\),但對于拿 50 分顯然還不夠,考慮優(yōu)化。

      我們可以拆貢獻:

      \[\begin{align} V_i &= \min(X, Z|i-j|-V_j),\ i > j \\ &= \min(X, iZ - jZ - V_j),\ i > j \\ &= \min[X, iZ + (-jZ - V_j)],\ i > j \end{align} \]

      可見,要讓 \(V_i\) 最小,我們需要讓 \((-jZ - V_j)\) 最小。

      可以開兩個小根堆,一個存本來少了糖的單位糖的 \((-jZ-V_j)\),可以用來更新現在糖果多了的地方;另一個存本來多了單位糖的 \((-jZ-V_j)\),可以用來更新現在多了糖果的地方。得到處理當前糖果的費用后把 \((-iZ-V_i)\) 存進堆里,供后面的答案更新。

      時間復雜度為 \(O(n\log n)\)

      以上內容基本賀自洛谷題解。

      #include <bits/stdc++.h>
      typedef long long ll;
      const int N = 5e5+10;
      int n, x, y, z, a[N], b[N];
      std::priority_queue<ll, std::vector<ll>, std::greater<ll> > more, less;
      ll v[N], ans;
      
      signed main() {
        freopen("autumn.in", "r", stdin);
        freopen("autumn.out", "w", stdout);
        std::ios::sync_with_stdio(false);
        std::cin >> n >> x >> y >> z;
        for (int i = 1; i <= n; i++) {
          std::cin >> a[i] >> b[i];
          for (int j = 1; j <= a[i] - b[i]; j++) {
            v[i] = y;
            if (!more.empty()) {
              v[i] = std::min(v[i], i * z + more.top());
              more.pop();
            }
            less.push(-v[i] - i * z);
            ans += v[i];
          }
          for (int j = 1; j <= b[i] - a[i]; j++) {
            v[i] = x;
            if (!less.empty()) {
              v[i] = std::min(v[i], i * z + less.top());
              less.pop();
            }
            more.push(-v[i] - i * z);
            ans += v[i];
          }
        }
        std::cout << ans << '\n';
        return 0;
      }
      

      總結

      這次考試最大的經驗就是沒有被看似困難的題面打倒,而是沉住心分析問題的本質。如果我上周六能有這樣的態(tài)度,就肯定不會 T2 空著了。

      當然,比較高級的東西還要多學(向隔壁學 OI 兩個月就學會了 Dijkstra 的 hiphop 大神學習),爭取拿更多分!

      posted @ 2025-10-28 21:53  JZ8  閱讀(5)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲制服无码一区二区三区| 国产肥妇一区二区熟女精品| 亚洲国产欧洲精品路线久久| 久久精品国产99国产精品严洲 | 久久www免费人成看片中文| 亚洲天堂一区二区成人在线| 在线国产你懂的| 亚洲av永久无码精品水牛影视| 色综合天天色综合久久网| 香港日本三级亚洲三级| 色九月亚洲综合网| 国产精品国产三级国产试看 | 欧美刺激性大交| 精品国产成人午夜福利| L日韩欧美看国产日韩欧美| 国内精品无码一区二区三区| 欧美z0zo人禽交另类视频| 亚洲AV无码精品色午夜果冻| 成人国产精品中文字幕| 在线免费播放亚洲自拍网| 日韩精品av一区二区三区| 亚洲精品尤物av在线网站| 无码日韩av一区二区三区| 99re热视频这里只精品| 成人午夜在线播放| 日韩在线视频网| 国产精品第一页中文字幕| 久久精品国产99精品国产2021| 99精品国产一区二区三 | 一本大道色婷婷在线| 国产成人亚洲精品狼色在线| 久在线视频播放免费视频| 亚洲综合无码一区二区三区不卡| 自拍偷自拍亚洲精品播放| 蜜臀av久久国产午夜| 亚洲精品乱码久久久久久自慰| 人妻少妇无码精品视频区| 不卡一区二区国产精品| 国产成人午夜福利院| 国产精品福利午夜久久香蕉| 亚洲一区二区三区18禁|