[题解] P13277 「CZOI-R4」改编

一道简单题目。

题目表述很明确:

  • 一个题目有初始的质量 \(a_i\)
  • \(x_i = 1\),则 \(a_i - k_1\)
  • \(y_i = 1\),则 \(a_i - k_2\)
  • \(x_i = y_i = 1\)\(a_i < 0\) 时,抛弃题目。

我们只需要计算出每一个的 \(a_i\),然后进行排序后输出答案即可。

建议排序时从大到小排列,最后输出 a[0] 即可。

// P13277 「CZOI-R4」改编
// code by:cq_irritater
// time:2025/07/13
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e5 + 10;

int n, k1, k2;
int a[MAXN], x[MAXN], y[MAXN];
int ans, cnt;

bool cmp(int x, int y)
{
    return x > y;
}

int main()
{
    // freopen("code.in", "r", stdin);
    scanf("%d %d %d", &n, &k1, &k2);
    for (int i = 1; i <= n; i++)
    {
        scanf("%d %d %d", &a[i], &x[i], &y[i]);
    }
    for (int i = 1; i <= n; i++)
    {
        if (x[i] == 1)
        {
            a[i] = a[i] - k1;
        }
        if (y[i] == 1)
        {
            a[i] = a[i] - k2;
        }
        if (x[i] == 1 && y[i] == 1)
        {
            a[i] = -1;
        }
    }
    for (int i = 1; i <= n; i++)
    {
        if (a[i] < 0)
        {
            cnt++;
        }
        if (cnt == n)
        {
            printf("-1");
            return 0;
        }
    }
    sort(a, a + n + 1, cmp);
    printf("%d", a[0]);
    return 0;
}

posted @ 2025-07-28 16:42  cq_irritater  阅读(226)  评论(0)    收藏  举报