В чем проблема с моим кодом?

prog.cpp: В функции «void helper()»: prog.cpp: 15:25: ошибка: ожидаемое основное выражение перед «длинным» ans = ans + max(long long(0),vec[i]-i);

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007

void helper(){
    ll n;
    cin>>n;
    vector<ll>vec(n);
    for(ll i=0;i<n;i++)
        cin>>vec[i];
    sort(vec.begin(),vec.end(),greater<ll>());
    ll ans=0;
    for(ll i=0;i<n;i++){
        ans = ans + max(long long(0),vec[i]-i);
        ans=ans % mod;
    }
    cout<<ans<<endl;
}

int main() {
    int test;cin>>test;
    while(test--){
        helper();
    }
    
    return 0;
}
0
SUKRITI GUIN 4 Фев 2022 в 10:37
1
Используйте max((long long)0, ven[i]-i); или max( 0ll, vec[i]-i );
 – 
Tim Roberts
4 Фев 2022 в 10:40
Пожалуйста, сообщите любому злодею, который говорит вам и вашим одноклассникам использовать #include <bits/stdc++.h>, что они не делают вам никаких одолжений и это ужасная привычка
 – 
WhozCraig
4 Фев 2022 в 11:21

2 ответа

Вы можете исправить ошибку одним из следующих способов: (ll)0 или (long long)0 или 0ll

2
Md. Faisal Habib 4 Фев 2022 в 11:13
Я также выполнил эти 3 шага, но он не работает, показывая ошибку
 – 
SUKRITI GUIN
4 Фев 2022 в 12:05
1
Я правильно выполнил код, используя описанный выше подход. Изменить строку кода: ans = ans + max( 0ll,vec[i]-i); Не могли бы вы поделиться, какую ошибку вы получаете после изменения?
 – 
Md. Faisal Habib
4 Фев 2022 в 12:09

Формальное правило состоит в том, что конструктор типа long long(0) может иметь имя типа только из одного слова, а long long состоит из двух слов. Упс, просто не работает.

Использование правильного приведения типа C++, такого как static_cast<long long>(0) does, работает. Однако для константы вы можете просто использовать 0LL и вообще избежать приведения.

0
BoP 4 Фев 2022 в 13:20