В чем проблема с моим кодом?
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;
}
2 ответа
Вы можете исправить ошибку одним из следующих способов: (ll)0
или (long long)0
или 0ll
Формальное правило состоит в том, что конструктор типа long long(0)
может иметь имя типа только из одного слова, а long long
состоит из двух слов. Упс, просто не работает.
Использование правильного приведения типа C++, такого как static_cast<long long>(0)
does, работает. Однако для константы вы можете просто использовать 0LL и вообще избежать приведения.
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .
max((long long)0, ven[i]-i);
илиmax( 0ll, vec[i]-i );
#include <bits/stdc++.h>
, что они не делают вам никаких одолжений и это ужасная привычка