蒟蒻求助,为啥要加long long?

P3406 海底高铁

不加 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


|