不加 long long 的代码(会WA):
```cpp
#include <iostream>
using namespace std;
const int MAXN=100010;
int n, m, p[MAXN], a[MAXN], b[MAXN], c[MAXN], ci[MAXN];
long long ans;
int main()
{
cin>>n>>m;
for(int i=1; i<=m; i++)
{
cin>>p[i];
}
for(int i=1; i<n; i++)
{
cin>>a[i]>>b[i]>>c[i];
}
for(int i=1; i<m; i++)
{
ci[min(p[i], p[i+1])]++, ci[max(p[i], p[i+1])]--;
}
for(int i=1; i<n; i++)
{
ci[i]=ci[i-1]+ci[i];
}
for(int i=1; i<n; i++)
{
if(a[i]*ci[i]<c[i]+b[i]*ci[i]) ans+=a[i]*ci[i];
else ans+=c[i]+b[i]*ci[i];
}
cout<<ans;
return 0;
}
```
加了 long long 的代码(AC):
```cpp
#include <iostream>
using namespace std;
const int MAXN=100010;
long long n, m, p[MAXN], a[MAXN], b[MAXN], c[MAXN], ci[MAXN];
long long ans;
int main()
{
cin>>n>>m;
for(int i=1; i<=m; i++)
{
cin>>p[i];
}
for(int i=1; i<n; i++)
{
cin>>a[i]>>b[i]>>c[i];
}
for(int i=1; i<m; i++)
{
ci[min(p[i], p[i+1])]++, ci[max(p[i], p[i+1])]--;
}
for(int i=1; i<n; i++)
{
ci[i]=ci[i-1]+ci[i];
}
for(int i=1; i<n; i++)
{
if(a[i]*ci[i]<c[i]+b[i]*ci[i]) ans+=a[i]*ci[i];
else ans+=c[i]+b[i]*ci[i];
}
cout<<ans;
return 0;
}
```
我觉得只有变量 ans 要开 long long ,但为啥其他的也要开 long long ?
by 966123anyunchuan @ 2020-11-20 18:00:45
有乘法操作,两个 $int$ 类型相乘会爆 $int$,可以在相乘时加上`1ll*`强转
by HH_Halo @ 2020-11-20 18:02:57
@[HH_Halo](/user/322491) 谢谢大佬!
by 966123anyunchuan @ 2020-11-20 18:05:16
@[HH_Halo](/user/322491) 请问大佬,转`long long`用`1ll`,那如何转`long double`呢?
by lzy20091001 @ 2023-07-21 21:29:57