USTSCPC2026

usts校赛题解

作者
MIOC
更新
阅读
—

校赛

牛客链接


A 平衡


B 最短异或2


C 天上一天地上一年


D 2026

#include<iostream>
using namespace std;

int main () {
    int n; string s;
    cin >> n >> s;
    int ans = 0;
    for (int i = 0; i < n - 3; ++i) {
        if (s[i] == '2' && s[i+1] == '0' && s[i+2] == '2') {
            ans++;
            i+=3;
        }
    }
    
    cout << ans << "\n";
    return 0;
}

E 气球

#include <iostream>
#include <utility>
#include <vector>
using namespace std;
constexpr long long MOD = 998244353;

long long qpow(long long a, long long b) {
    long long res = 1;
    while (b) {
        if (b&1) {
            res *= a; res %= MOD;
        }
        a *= a; a %= MOD;
        b >>= 1;
    }
    return res;
}

int main() {
    int T; cin >> T;

    vector<pair<int,int>> qs(T);
    int maxn = 0;
    for (int i = 0; i < T; i++) {
        int x,y; cin >> x >> y;
        qs[i] = {x,y};
        maxn = max(maxn,x);
    }

    vector<long long> inv(max(maxn,200) + 1);
    for (int i = 0; i < (int)inv.size(); i++) {
        inv[i] = qpow(i, MOD - 2);
    } 

    for (auto [n,m] : qs) {
        vector<long long> f(n+1, 0);
        long long sum = 0;
        
        for (int i = 1; i <= n; i++) {
            if (i < m) {
                f[i] = (m + sum) % MOD *inv[i] % MOD;
                sum = (sum + f[i]) % MOD;
            } else {
                f[i] = (1 + sum * inv[m]) % MOD;
                sum  = (sum + f[i] - f[i - m] + MOD) % MOD;
            }
        }

        cout << f[n] << "\n";
    }

    return 0;
}

F 斐波那契数列

#include <iostream>
using namespace std;

int fb(int n) {
    if (n == 1 || n ==2 ) {
        return 1;
    }
    return fb(n-2) + fb(n-1) +1;
}

int main() {
    int n; cin >> n;

    int ans = fb(n);
    cout << ans << "\n";
    return 0;
}

G 构造王国

#include <iostream>
using namespace std;

int main() {
    int n; cin >> n;
    if (n%2==0) {
        int k = n*n/4;
        cout << k << "\n";

        for (int i = n; i >= n/2 +1; i--) {
            for (int j = n+1-i; j <= i-1; j++) {
                cout << i << " " << j << "\n";
            }
        }

    }else{
        int k = (n-1)*(n-1)/4 + (n -1)/2;
        cout << k << "\n";

        for (int i = n; i >= (n+1)/2 +1; i--) {
            for (int j = n+1-i; j <= i-1; j++) {
                cout << i << " " << j << "\n";
            }
        }
    }

    return 0;
}

H Hard Problem

int main () {
    int n; cin >> n;
    int ans = 0;
    for (int i = 0; i < n; i++) {
        int x; cin >> x;
        if (x == 6 || x == 7) {
            ans++;
        }
    }
    cout << ans << "\n";
    return 0;
}

I 完全非等比数列


J 完全非等比数列(Checker)