Codeforces Round #723 (Div. 2) (A~C题题解)

补题链接:Here

1526A. Mean Inequality

给定 2n 个整数序列 a,请按下列两个条件输出序列

  • b 序列是 a 序列的重排序
  • bibi1+bi+12[1,2n]

排序,然后一左一右相应输出即可

void solve() {
    int n; cin >> n;
    vector<int>v(n * 2);
    for (int &x : v)cin >> x;
    sort(v.begin(), v.end());
    int i = 0, j = 2 * n - 1;
    while (i < j) {
        cout << v[i] << " " << v[j] << " ";
        i++, j--;
    }
    cout << "\n";
}

1526B. I Hate 1111

给定正整数 x(1x1e9) 请问 x 是否能被 11,111,1111,.... 构成?

如:

  • 33=11+11+11
  • 144=111+11+11+11

利用数学可证明 1111 以上的数字一定能由 11,111 构成,

如:1111=11101 往上递推,所以我们只需要使用 11,111 即可

对于 5000 以下的数字,完全背包判断即可

void solve() {
    int n; cin >> n;
    for (int i = 0; i <= 20; ++i) {
        if (n % 11 == 0) {
            cout << "YES\n";
            return ;
        }
        n -= 111;
        if (n < 0)break;
    }
    cout << "NO\n";
}

1526C2. Potions (Hard Version) (反悔贪心!!!)

给定 n(1n2e5) 个药水,每个药水可回复和减少 ai(109ai109) 点 HP,

初始HP = 0,请问在喝药水保证 HP>=0 的情况下最多能喝多少瓶药水


反悔贪心!!!

2.png

2.png

上面这张图即是最好的说明

using ll = long long;
void solve() {
    int n; cin >> n;
    priority_queue<ll, vector<ll>, greater<ll>>q;
    ll s = 0;
    for (int i = 1; i <= n; ++i) {
        ll x; cin >> x;
        s += x;
        q.push(x);
        while (s < 0) {
            s -= q.top();
            q.pop();
        }
    }
    cout << q.size();
}
posted @   RioTian  阅读(127)  评论(3编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 全程不用写代码,我用AI程序员写了一个飞机大战
历史上的今天:
2020-05-29 部分和问题---多重部分和问题---动态规划
2020-05-29 例题 5-7 丑数(Ugly Numbers,UVa 136)
2020-05-29 UVA540 Team Queue(双queue)
2020-05-29 # 2027 ( 统计元音 ) :hash应用
点击右上角即可分享
微信分享提示

📖目录