【问题标题】:SIGSEGV error in spoj but working fine in ideonespoj 中的 SIGSEGV 错误,但在 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 上所产生的影响,两者都工作正常。

【问题讨论】:

    标签: c++ segmentation-fault


    【解决方案1】:

    您的递归不会终止,例如当你打电话给pow(0)时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多