• 暑期训练1 Gym-102623L Lottery Tickets 模拟 贪心构造


    a[i] 表示可以选择数i的个数。

    对于每一组询问a,求出能够组合出的被4整除的最大的数。

    显然是贪心构造,被4整除就等价于末尾两位被4整除。

    需要注意的点有: 前导0,单个数字

    这里通过string自带的比较性质写了一个cmp函数。

    void solve() {
        memset(val, 0, sizeof val);
        vector<string> v;
        for (int i = 0; i < 10; i++) {
            int x = readint();
            val[i] += x;
        }
        int sum = 0;
        for (int i = 1; i < 10; i++) sum += val[i];
        if (!sum) {
            puts("0");
            return;
        }
        int f1, f2;
        for (int i = 0; i < 100; i += 4) {
            if (i < 10) f1 = 0;
            else f1 = get1(i);
            f2 = get2(i);
            if (!f1 && val[f2]) {
                string xx;
                xx.push_back(f2 + '0');
                v.push_back(xx);
            }
            if (val[f1] && val[f2]) {
                val[f1]--;
                val[f2]--;
                if (f1 == f2 && val[f1] < 0) {
                    val[f1]++;
                    val[f2]++;
                    continue;
                }
                string tmp;
                for (int i = 9; i >= 0; i--) for (int j = 0; j < val[i]; j++) tmp.push_back(i + '0');
                tmp.push_back(f1 + '0');
                tmp.push_back(f2 + '0');
                val[f1]++, val[f2]++;
                int head = 0;
                while (tmp[head] == '0') head++;
                tmp = tmp.substr(head);
                v.push_back(tmp);
            }
        }
        if (!v.empty()) {
            sort(v.begin(), v.end(), cmp);
            cout << v.back() << "
    ";
            return;
        }
        puts("-1");
    }
    
    int main() {
        int T = readint();
        while (T--) solve();
    }
  • 相关阅读:
    设计模式之策略模式
    assert断言——调试中不应该是syso
    Spring AOP
    MyBatis
    事务处理与使用连接池管理连接
    管理结果集(ResultSet)
    执行SQL语句的方式
    JDBC基础:
    NIO.2
    NIO
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13531495.html
Copyright © 2020-2023  润新知