• [CCPC2020绵阳L] Lottery


    [CCPC2020绵阳L] Lottery

    Description

    给你 n 组 a x(每个 a 都相同),代表有 x 个 2 ^ a,问用这些数字最多组成多少种不同的数字。

    Solution

    相同的元素最多保留两个,多的变成大的

    非连续的不会相互影响(因为和不够),所以相互独立

    每段连续的以最小的为单位求和再加一,乘起来就是答案

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    const int mod = 1e9 + 7;
    
    int cid = 0;
    
    void solve()
    {
        int n;
        cin >> n;
        map<int, int> src;
        while (n--)
        {
            int a, x;
            cin >> a >> x;
            src[a] += x;
        }
    
        for (auto &[x, y] : src)
        {
            if (y > 2)
            {
                src[x + 1] += (y - 1) / 2;
                y -= (y - 1) / 2 * 2;
            }
        }
    
        vector<pair<int, int>> vec;
        for (auto [x, y] : src)
            if (y > 0)
                vec.push_back({x, y});
    
        int m = vec.size();
        int l = 0, r;
        int ans = 1;
        while (l < m)
        {
            int sum = 1 + vec[l].second, bas = 1;
            r = l + 1;
            while (r < m && vec[r].first == vec[r - 1].first + 1)
            {
                bas *= 2;
                sum += bas * vec[r].second;
                bas %= mod;
                sum %= mod;
                ++r;
            }
            ans *= sum;
            ans %= mod;
            l = r;
        }
        ++cid;
        cout << "Case #" << cid << ": ";
        cout << ans << endl;
    }
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        int t;
        cin >> t;
        while (t--)
            solve();
    }
    
  • 相关阅读:
    [bzoj1797] [Ahoi2009]Mincut 最小割
    [bzoj3343] 教主的魔法
    [bzoj3702] 二叉树
    [bzoj3809] Gty的二逼妹子序列
    JavaScript的面向对象原理之原型链
    javaScript操作DOM深入理解
    BOM浏览器对象模型
    JavaScript
    DAO模式
    使用ADO.NET访问数据库
  • 原文地址:https://www.cnblogs.com/mollnn/p/14648370.html
Copyright © 2020-2023  润新知