В чем проблема с логами c кода? - PullRequest
0 голосов
/ 10 июля 2020

Reference Image

I have been trying to solve this simple problem in C++ but every time I submit, it says wrong answer. I am pretty sure I have got the logic right. Any help is appreciated.

Question: Find the sum of distances between the inputted numbers.

Ex. Input: 2 5 8 2 1
Distance=2+2+5+0 =9, (1 < n < 1000000)

PS: Input can't have the same number consecutively.
PSS: Subtask two is giving Wrong Answer

Code:

#include <iostream>
using namespace std;

int main() {
    // your code goes here

    int t,a[100000],n,sum=0;

    cin>>t;

    for(int i=0;i<t;i++)
    {
        cin>>n;
        
        for(int j=0;j<n;j++)
        {
            cin>>a[j];
        }
        for(int j=0;j<n-1;j++)
        {
            if(a[j]!=a[j+1])
            {
                sum = sum + abs(a[j]-a[j+1])-1;
            }
       }
        cout<<sum<<endl;
        sum=0;   
    }
}

1 Ответ

1 голос
/ 10 июля 2020

Проблема с вашим кодом заключается в том, что вы используете тип int для sum, максимальное значение которого (1E11) может превышать верхний предел int (если он 32-битный или меньше). Для хранения суммы используйте long long (по крайней мере, 64-битный).

Ну, вы также можете оптимизировать код, потому что вам точно не нужен массив 100000 целых чисел и хранить в нем значения . Вы можете сделать это, используя только две переменные.

Вот модифицированная реализация вашего logi c:

#include <iostream>

int main() {
    int t, n, first, second;
    long long sum; // or better use std::int_fast64_t sum;
    std::cin >> t;
    while (t--) {
        sum = 0;
        std::cin >> n >> first;
        for (int i = 0; i < n - 1; ++i) {
            std::cin >> second;
            sum += std::abs(first - second) - 1;
            first = second;
        }
        std::cout << sum << std::endl;
    }
}

PS: В конкурентном кодировании проверка предоставленных ограничений, таких как if(a[j]!=a[j+1]), бесполезный. Постановка задачи просто гарантирует, что это никогда не будет false.

...