1 条题解

  • 0
    @ 2025-8-24 23:12:18

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar chenyuan3
    https://www.luogu.com.cn/article/21efws0f

    搬运于2025-08-24 23:12:18,当前版本为作者最后更新于2025-04-10 19:03:18,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    思路:设 ii 为获得当前奖项的最后一名。

    • 上界:显然是获得该奖项的最低分;
    • 下界:分情况讨论:
      • 观察样例发现yi+1>0y_{i+1}>0 时答案为 xi+1x_{i+1}yi+11y_{i+1}-1
      • 显然罚时不能是负数,所以当 yi+1=0y_{i+1}=0 时通过数只能变高为 xi+11x_{i+1}-1,罚时取最大,考虑所有题都在 299299 分钟通过,且交满了 300×30300\times30 发提交,除了最后一发通过以外,其它都计算罚时。故最大的罚时为 $299(x_{i+1}+1)+[9000−(x_{i+1}+1)]×20=180000+279(x_{i+1}+1)$。

    代码:(AC 记录

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const ll maxn = 1e5 + 10;
    ll a, b, c, d, p[maxn], t[maxn];
    void work(ll n) // 用于输出 n 为这一奖项的最后一名的上界与下界
    {
        cout << p[n] << ' ' << t[n] << ' ';
        if (t[n + 1] > 0)
        {
            cout << p[n + 1] << ' ' << t[n + 1] - 1 << endl;
        }
        else
        {
            cout << p[n + 1] + 1 << ' ' << 180000 + (p[n + 1] + 1) * 279 << endl;
        }
    }
    void solve()
    {
        cin >> a >> b >> c >> d;
        for (ll i = 1; i <= a + b + c + d; i++)
        {
            cin >> p[i] >> t[i];
        }
        work(a);
        work(a + b);
        work(a + b + c);
    }
    int main()
    {
    	ios::sync_with_stdio(false);
    	cin.tie(nullptr);
    	cout.tie(nullptr);
     	// ll t; cin >> t; while (t--)
    	solve();
    	return 0;
    }
    
    • 1

    信息

    ID
    11790
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者