有关ACM题目超出内存限制问题
原题连接:http://acm.pku.edu.cn/JudgeOnline/problem?id=3685
我写了一个程序。测试数据没错,但是提交就是说我超内存。我感觉到很困惑我只用了两个vector而已,难道vector类占的内存真的那么大吗?
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool isSmaller(const int &s1,const int &s2){
return s1<s2;
}
int main(){
vector<long int> result;//用于存放每次输入应该输出的结果,读入完成后一次输出
vector<long int> temp_result;//因为每次输入的N都是按升序的,矩阵元素不用每次全部重新生成,所以声明为全局变量
temp_result.push_back(3);//为了防止第一个输入N不是1的情况,先将1的情况压栈,以便使用上一条解析的内存节省
int i;
cin>>i;
int last_N=1;
for(int j=0;j<i;j++){
int N;
long int M;
cin>>N>>M;
long int temp;
if(N!=1){//N等于1的情况不同于其他数字
for(int q=last_N+1;q<=N;q++){//对多出的列元素进行压栈
for(int p=1;p<=last_N;p++){
temp=p*p+100000*p+q*q-100000*q+p*q;
temp_result.push_back(temp);
}
}
for(int p=last_N+1;p<=N;p++){//对多出的行元素进行压栈
for(int q=1;q<=N;q++){
temp=p*p+100000*p+q*q-100000*q+p*q;
temp_result.push_back(temp);
}
}
}
stable_sort(temp_result.begin(),temp_result.end(),isSmaller);//对该矩阵数据进行升序排序
temp=temp_result[M-1];
result.push_back(temp);
last_N=N;
}
for(vector<long int>::const_iterator iter=result.begin();
iter!=result.end();iter++)
cout<<*iter<<endl;
return 0;
}
希望各位高手不吝赐教,一起将问题找出来