COCI Tuna题解

题目描述

渔夫sime昨晚抓住了N条金枪鱼。在一个特殊的app的帮助下,他将它们卖给一家专门收购优质鱼的日本著名公司。app是以何种方式估算金枪鱼的价值的呢?根据金枪鱼的照片,app返回两个估计价值,P1和P2。如果两个估值之间的差异小于或等于X,则采用更高的那个估值。如果差值大于X,则app返回第三个估计价值P3,然后将该估值作为金枪鱼的最终价值。编写一个程序,根据app给这每条金枪鱼的估值(有时两个,有时三个),计算捕获的金枪鱼的总价值。

输入格式

第一行输入包含整数N(1≤N≤20)。表示金枪鱼的数量。
第二行输入包含整数X(1≤X≤10)。表示题目中提到的判断标准中的X。
接下来N组数,每组属于以下两种情况之一:
在第一行中包含两个整数P1和P2(1≤P1,P2≤100)
在第一行中包含两个整数P1和P2(1≤P1,P2≤100),在第二行中包含一个整数P3(1≤P3≤100)
其中P1、P2、P3为题目中提到的估值。

输出格式

输出一个整数。表示所有金枪鱼的总价。

---------------------------分界线----------------------------

这是一道打卡题:

根据输入判断加上p1, p2, p3即可

(注意要用绝对值!!!)

代码(Code

#include <cstdio>
#include <cctype>
template <class T>
void r(T &x)
{
    #define gc getchar()
    x = 0;
    int f = 1;
    char c = gc;
    while (!isdigit(c)) {if (c == '-') f = -1; c = gc;}
    while (isdigit(c)) x = (x << 3) + (x << 1) + (c ^ 48), c = gc;
    x *= f;
}
void openfile()
{
    freopen ("tuna.in", "r", stdin);
    freopen ("tuna.out", "w", stdout);
}
int Max(int x, int y)
{
    return x > y ? x : y;
}
int Fabs(int x)
{
    return x > 0 ? x : (~x) + 1;
}
int n, ans, x;
int main()
{
    ///openfile();
    r(n);
    r(x);
    for (int i = 1;i <= n; i++)
    {
        int p1, p2;
        r(p1), r(p2);
        if (Fabs(p1 - p2) <= x)
            ans += Max(p1, p2);
        else
            r(p1), ans += p1;
    }
    printf ("%d", ans);
    return 0;
}

Thanks!

原创文章 23 获赞 41 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43537070/article/details/96456855