在Spoj AP2上得到错误的答案

时间:2019-01-10 10:38:05

标签: c++ optimization

我正在解决问题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;

        }
    }

1 个答案:

答案 0 :(得分:0)

您可能在此行溢出:

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

您可以通过这种方式避免溢出:

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

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

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