Этот фрагмент кода компилируется на моем ПК, но не на стандартном компиляторе C ++ 98 на сервере соревнований. - PullRequest
0 голосов
/ 25 декабря 2018

Я не получаю никаких ошибок на моем компиляторе, и я получаю правильный результат.Я также пробовал онлайн компиляторы C ++ 98, и он работает там же.Но когда я проверяю программу на соревновательном сервере, он говорит, что компиляция не удалась.

Может кто-нибудь сказать мне, что делать с моим компилятором или что не так с моим кодом?Вот программа:

#include <stdio.h>
#include <algorithm>

using namespace std;

class P
{
    public:
        int t;
        int l;
        P();
        P(int t, int l);
        bool operator<(P next);
};

P::P()
{
    this->t = 0;
    this->l = 0;
}

P::P(int x, int y)
{
    this->t = x;
    this->l = y;
}

bool P::operator<(P next)
{
    return this->l > next.l;
}

P a[110];

int main()
{
    int z, n, x, y, tim = 0;
    scanf("%d %d",&z,&n);

    for(int i = 0; i < z; i++)
    {
        scanf("%d %d",&x,&y);
        P b(x,y);
        a[i] = b;
    }   

    sort(a,a + z);
    tim = max(a[0].l,a[0].t);

    for(int i = 1; i <= z; i++)
    {
        tim += a[i - 1].l - a[i].l;
        tim = max(a[i].t,tim);
    }

    printf("%d\n",tim);
}

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

std::max принимает два const T& аргумента.Без объявления оператора сравнения const:

bool operator<(const P& next) const;

не существует оператора сопоставления для операндов std::max.

Одно из объяснений того, почему это работает на вашем локальном компьютереявляется то, что ваше определение max является не функцией шаблона, а макросом, который не будет иметь этой проблемы (но не будет стандартным C ++).

0 голосов
/ 25 декабря 2018

Ваш operator< должен быть bool operator<(const P &next) const.

...