在 spoj AP2 上弄错了

getting wrong anwers on spoj AP2

本文关键字:错了 AP2 spoj      更新时间:2023-10-16

我正在解决一个问题 SPOJ AP2

您将获得第 3

学期、第 3 学期和系列的总和。您需要系列和系列的打印长度。

使用的逻辑 ->第一个术语+最后一个术语=第三个术语+第三个术语

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