spoj 中的 SIGSEGV 错误,但在 ideone 中工作正常
Posted
技术标签:
【中文标题】spoj 中的 SIGSEGV 错误,但在 ideone 中工作正常【英文标题】:SIGSEGV error in spoj but working fine in ideone 【发布时间】:2014-09-19 22:59:09 【问题描述】:这是 spoj 上名为 maxsub 的问题的代码
#include<iostream>
#include<algorithm>
using namespace std;long long pow(int n);
int main()
int t;
cin>>t;
while(t--)
int n;
cin>>n;
long long int arr[n];
for(int i=0;i<n;i++)
cin>>arr[i];
sort(arr,arr+n);
int j=n-1;
if(arr[n-1]<0)
while(arr[j]==arr[j-1])
j--;
cout<<arr[n-1]<<" "<<(n-j)<<endl;
j=n-1;
else if(arr[n-1]==0)
while(arr[j]==arr[j-1])
j--;
cout<<arr[n-1]<<" "<<(pow((n-j))-1)%1000000009<<endl;
j=n-1;
else
long long int sum=0;
while(arr[j]>0)
sum+=arr[j];j--;
int k=0;
if(arr[j]==0)
k=1;
while(arr[j]==arr[j-1])
j--;k++;
cout<<sum<<" "<<pow((k)%1000000009)<<endl;
long long pow(int n)
if(n==1)
return 2;
long long int m= pow(n/2);
if(n%2==0)
return (m*m)%1000000009;
else
return (m*m*2)%1000000009;
这段代码给出了 sigsegv 错误,但如果我用它替换上面的 pow 函数,那么它工作正常。
long long pow(int n)
int i=1;long long sum=1;
while(n>=i)
sum=sum*2;
if(sum>=1000000009)
sum=sum%1000000009;
i++;
return sum;
我使用递归的方式来寻找能力只是为了减少解决方案的运行时间。 但我无法了解它在 ideone 上所产生的影响,两者都工作正常。
【问题讨论】:
【参考方案1】:您的递归不会终止,例如当你打电话给pow(0)
时。
【讨论】:
以上是关于spoj 中的 SIGSEGV 错误,但在 ideone 中工作正常的主要内容,如果未能解决你的问题,请参考以下文章