我正在解决一个问题SPOJ AP2

您将获得第三学期,第三学期以及系列的总和。您需要系列和系列的打印长度。

使用的逻辑->第一项+最后一项=第三项+第三项

sum=n/2(first+last)

我尝试了许多测试用例,所有这些用例都获得了正确的输出
但是在spoj上我回答“WA”是错误的
    #include<iostream>
    using namespace std;
    int main(){
        int t;
        cin>>t;
        while(t--){
            long long int third;
            long long int thirdlast;
            long long int sum;
            cin>>third>>thirdlast>>sum;
            long long int n=(2*sum)/(third+thirdlast);
            long long int d= (thirdlast-third)/(n-5);  //(2*thirdlast-third*n+3*third)/(5-n);
            long long int a=(third-2*d);
            //cout<<n<<endl;
            //cout<<d<<endl;
            //int d=0;
            for(int i=1;i<=n;i++){
                long long int temp=d*(i-1);
              //  int t=a+d;
                cout<<a+temp<<" ";


            }
            cout<<endl;

        }
    }

最佳答案

您可能在此行溢出:

n=(2*sum)/(third + thirdlast);

您可以通过这种方式避免溢出:
n = 2 * (sum/(third + thirdlast));

但是,由于third + thirdlast可能无法划分sum,因此您必须对其进行测试,并在必要时添加n++

另一个解决方案是将unsigned long long用于n

关于c++ - 在spoj AP2上得到错误的答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54126838/

10-09 13:25