码蹄杯第五场入门赛 复盘

绝对众数

题意:

在严格保证序列中有绝对众数的前提下输出这个绝对众数 定义绝对众数为序列中出现次数严格大于一半的数字

Code:

void solve() {
    int n;
    cin >> n;
    map <int, int> mp;
    for (int i = 1, x; i <= n; i++) {
        cin >> x;
        mp[x]++;
    }
    for (auto x : mp) {
        if (x.second > n / 2) {
            cout << x.first << '\n';
            return ;
        }
    }
} 

  

今年又是和平的一年

Code:

bool check (i64 l, i64 r, i64 x) {
    return x >= l && x <= r;
}

void solve() {  
    i64 l, r;
    cin >> l >> r;
    i64 ans = r - l + 1;
    V vc = {1, 1634, 8208, 9474};
    for (int i = 0; i < 4; i++) {
        if (check(l, r, vc[i])) ans--;
    }
    cout << ans << '\n';
}

  

十的倍数

Code:

i64 a[N][N];  

struct node {
    i64 cnt2, cnt5;
} dp[N][N];

void solve() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> a[i][j]; 
            dp[i][j] = {inf, inf};
        }
    }    
    auto get2 = [&] (i64 x) -> int {
        int res = 0;
        for (res = 0; x % 2 == 0; res++, x /= 2);
        return res;
    } ; 
    auto get5 = [&] (i64 x) -> int {
        int res = 0;
        for (res = 0; x % 5 == 0; res++, x /= 5);
        return res;
    } ;  
    dp[1][1] = {get2(a[1][1]), get5(a[1][1])}; 
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            if (!a[i][j]) continue;
            if (i > 1) {
                dp[i][j].cnt2 = min(dp[i - 1][j].cnt2 + get2(a[i][j]), dp[i][j].cnt2);
                dp[i][j].cnt5 = min(dp[i - 1][j].cnt5 + get5(a[i][j]), dp[i][j].cnt5);
            }
            if (j > 1) {
                dp[i][j].cnt2 = min(dp[i][j - 1].cnt2 + get2(a[i][j]), dp[i][j].cnt2);
                dp[i][j].cnt5 = min(dp[i][j - 1].cnt5 + get5(a[i][j]), dp[i][j].cnt5);
            }
        }
    }  
    cout << min({dp[n][n].cnt2, dp[n][n].cnt5});
}

  

又见斐波那契

Code:

void solve() {  
    V vc = {1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040};
    int n;
    cin >> n;
    V Q(n);
    for (int i = 0; i < n; i++) {
        cin >> Q[i];
    } 
    V dp(int(1e6 + 5), 0);
    dp[0] = 1;
    for (int i = 0; i < vc.size(); i++) {
        for (int j = int(1e6); j >= vc[i]; j--) {
            dp[j] += dp[j - vc[i]];
        }
    } 
    for (int i = 0; i < n; i++) {
        cout << dp[Q[i]] << '\n'; 
    }
}

  

两个老哥

  

 

posted @ 2024-11-11 08:26  Iter-moon  阅读(53)  评论(0)    收藏  举报