Codeforces比赛中遇到STL的大坑之accumulate

虽然C++永久了感觉很熟练,但是并没有什么卵用,随时都可能遇到可以吃掉剩下时间的迷のBUG。。。

#include <iostream>
#include <numeric>
#include <vector>
using namespace std;
int main(){
	vector<long long int> v(3,(long long int)1e9);
	cout<<accumulate(v.begin(),v.end(),0)<<endl;
	return 0;
}

根据经验认为我vector的元素都是long long int的,那么accumulate加起来自然是long long int类型的,然而事实。。。

-1294967296

ps: 编译器是Linux下的gcc 7.3.0

OTZ

正确做法

accumulate(v.begin(),v.end(),0LL)

居然是第三个初始值的参数类型决定结果类型。比赛要是遇到这种BUG那就一脸懵逼了。C语言大法好(手动滑稽)

posted @ 2018-02-24 22:21  IceQuarze  阅读(226)  评论(2编辑  收藏  举报