从文件流读200000个long long类型的数,一边读一遍插入multiset,但是读到199000左右程序总会卡住,但是等待90s左右程序会继续运行完毕。
我做了一些尝试:
- 注释掉ms.insert(),可以读完,不会卡住。这说明文件里面是有200000个数字的。
- 不从文件流读数据,随机生成200000个long long类型的数,边生成边insert到multiset,可以全部插入,不会卡住。
- 把n改小一些,边读边insert,还是会在比n略小的地方读取卡住。哪怕把n改到20000,也会在略小于n的地方卡住。
- 使用clock()计时,虽然在199000左右程序总会卡住,但是卡住的那组数据的计时的结果和其他的一样,都是0。
#include <fstream>
#include <iostream>
#include <set>
using namespace std;
typedef long long ll;
int main(){
ifstream cin("20230303.txt");
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
ll n,c,inum;
cin >> n >> c;
multiset<ll> ms;
for(int i=0;i<n;i++){
cin >> inum;
ms.insert(inum);
}
ll cnt=0;
for(multiset<ll>::iterator it = ms.begin();it != ms.end();it++){
cnt += ms.count(*it+c);
}
cout << cnt;
return 0;
}
等待一会是可以读完的:
卡住的那条数据卡住的时间没有被clock记录下来