快轉到主要內容

2025 ICPC 台中區域賽心得

目錄

第一次踏上 ICPC 的舞台
多少有些緊張,讓我的表現沒有正常的水準
當下 pM 我竟然用 Dijkstra 解,而不是 BFS
然後直接在 pF 燒雞四小時
結果賽後回去寫 pF 發現簡單到靠杯
一直懷疑自己到底為什麼當時沒想到
後來在宿舍裡靜下心慢慢寫成功寫出 6 題,一整個超難過
算了,還是繼續刷題,希望明年能夠拿牌吧
計畫在這一年把 cses 刷完,然後開始拿 codeforce 刷考古練手

另外我覺得衣服明明顏色就很好看,但上面印台中市政府經濟發展局整個就遜掉了
還有那個袋子到底有誰會用到,還超難收的,差評

絕對不會忘記第一名的新加坡隊伍有拔頭髮怪人
頭髮越少戰力越強

附上題組連結 點我前往 codeforce

pA 程式碼
#

#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define fi first
#define se second
#define INF LONG_LONG_MAX/1000
#define WA() cin.tie(0)->sync_with_stdio(0)
#define all(x) (x).begin(), (x).end()
#define int long long
#define PII pair<int, int>

signed main() { WA();
    int a, b, c;
    cin >> a >> b >> c;
    if (a > b) swap(a, b);
    if (b > c) swap(b, c);
    if (a > b) swap(a, b);
    if (c-a >= 10) cout << "check again\n";
    else cout << "final " << b << '\n';
}

pB 程式碼
#

#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define fi first
#define se second
#define INF LONG_LONG_MAX/1000
#define WA() cin.tie(0)->sync_with_stdio(0)
#define all(x) (x).begin(), (x).end()
#define int long long
#define PII pair<int, int>

signed main() { WA();
    int n, m, l;
    double x, y; cin >> n >> m >> l >> x >> y;
    vector<tuple<int, int, int>> event(n); // position, type, id
    for (auto &[s, id, t] : event) {
        cin >> s >> t;
        t = min(l, t);
        id = -1;
    }
    for (int i = 0; i < m; i++) {
        int p; cin >> p;
        event.pb({p, 1, i});
    }
    sort(all(event));
    vector<double> ans(m);
    double mn = INF;
    for (auto &[a, type, b] : event) {
        if (~type) ans[b] = min(mn, (l-a)/y);
        else mn = min(mn, (double)(b-a)/x+(double)(l-b)/y);
    }
    for (auto &i : ans) cout << fixed << setprecision(14) << i << '\n';
}

pE 程式碼
#

#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define fi first
#define se second
#define INF LONG_LONG_MAX/1000
#define WA() cin.tie(0)->sync_with_stdio(0)
#define all(x) (x).begin(), (x).end()
#define int long long
#define PII pair<int, int>

signed main() { WA();
    int t; for (cin >> t; t--;) {
        string s, a, b; int n, m; cin >> s >> n >> m;
        a = b = s; n--, m--;
        while (n--) next_permutation(all(a));
        while (m--) next_permutation(all(b));
        int ca, cb; ca = cb = 0;
        for (auto &i : a) for (auto &j : b) if (i == j) cb++;
        for (int i = 0; i < s.size(); i++) if (a[i] == b[i]) ca++;
        cout << ca << 'A' << cb-ca << "B\n";
    }
}

pF 程式碼
#

#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define fi first
#define se second
#define INF LONG_LONG_MAX/1000
#define WA() cin.tie(0)->sync_with_stdio(0)
#define all(x) (x).begin(), (x).end()
#define int long long
#define PII pair<int, int>

signed main() { WA();
    int n; cin >> n;
    vector<int> v(n), pre(n+1), suf(n+1);
    for (auto &i : v) cin >> i;
    for (int i = 1; i <= n; i++) pre[i] = __gcd(pre[i-1], v[i-1]);
    for (int i = 1; i <= n; i++) suf[i] = __gcd(suf[i-1], v[n-i]);
    int ans = 0;
    for (int i = 1; i < n; i++) ans += min(pre[i], suf[n-i+1]);
    cout << ans << '\n';
}

pK 程式碼
#

#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define fi first
#define se second
#define INF LONG_LONG_MAX/1000
#define WA() cin.tie(0)->sync_with_stdio(0)
#define all(x) (x).begin(), (x).end()
#define int long long
#define PII pair<int, int>

int mx[] = {0, 1, 1, 1, 0, -1, -1, -1}, my[] = {1, 1, 0, -1, -1, -1, 0, 1};

signed main() { WA();
    int n, m, k; cin >> n >> m >> k;
    vector<vector<char>> v(n, vector<char>(m));
    vector<int> cnt(10000001);
    for (auto &i : v) for (auto &j : i) cin >> j;
    for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) {
        if (!isdigit(v[i][j])) continue;
        cnt[v[i][j]-'0']++;
        for (int dir = 0; dir < 8; dir++) {
            char last = '_';
            int nx = i, ny = j, now = 0, buf = 1, cur = v[i][j]-'0';
            while (1) {
                nx += mx[dir], ny += my[dir];
                if (nx < 0 || nx >= n || ny < 0 || ny >= m) break;
                if (isdigit(v[nx][ny])) {
                    cur = cur*10+v[nx][ny]-'0';
                    if (now+buf*cur > 1000000) break;
                    cnt[now+buf*cur]++;
                }
                else {
                    if (last == '+' || last == '*') break;
                    if (v[nx][ny] == '+') now += cur*buf, cur = 0, buf = 1;
                    if (v[nx][ny] == '*') buf *= cur, cur = 0;
                }
                last = v[nx][ny];
            }
            
        }
    }
    for (int i; k--;) cin >> i, cout << cnt[i] << '\n';
}

pM 程式碼
#

#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define fi first
#define se second
#define INF LONG_LONG_MAX/1000
#define WA() cin.tie(0)->sync_with_stdio(0)
#define all(x) (x).begin(), (x).end()
#define int long long
#define PII pair<int, int>

signed main() { WA();
    int n, m, k; cin >> n >> m >> k;
    vector<int> v(n+1);
    vector<vector<int>> g(n+1);
    for (int i = 1; i <= n; i++) cin >> v[i];
    while (m--) {
        int a, b; cin >> a >> b;
        g[a].pb(b);
        g[b].pb(a);
    }
    queue<PII> q; vector<int> ans(k+1), vis(n+1);
    q.push({1, 0}); int cnt = 0;
    while (q.size()) {
        auto [id, d] = q.front(); q.pop();
        if (vis[id]) continue;
        vis[id] = 1;
        ans[v[id]] = d;
        for (auto &u : g[id]) q.push({u, d+1});
    }
    for (int i = 1; i <= k; i++) cout << ans[i] << ' ';
}
Piau 的筆記本
作者
Piau 的筆記本
希望我寫下來的東西能夠長久的記在我的腦中