Teść zadania:
https://main2.edu.pl/c/konkurs-podstaw-algorytmiki/p/sma/Rozwiązuję zadanie poniższym sposobem dla danych wejściowych:
5 3
1 3 2 2 3
1 - 1 możliwość [1]
3 - 2 możliwości [3; 3,1]
2 - 3 m. [2; 2,3; 2,3,1]
2 - 1 m. [2]
3 - 2 m. [3; 3,2] 1 + 2 + 3 + 1 + 2 = 9
Podczas sprawdzania pojawiają się błędy:
2a wiersz 1: wczytano '53', a oczekiwano '36'
3a wiersz 1: wczytano '6307725', a oczekiwano '430001'
3b wiersz 1: wczytano '28', a oczekiwano '19'
4a wiersz 1: wczytano '2246063', a oczekiwano '137815'
5a wiersz 1: wczytano '1789516979', a oczekiwano '25796059'
5b wiersz 1: wczytano '261602', a oczekiwano '261391'
6a wiersz 1: wczytano '2814387425', a oczekiwano '18506036'
7a wiersz 1: wczytano '6192726304', a oczekiwano '63903167'
7b wiersz 1: wczytano '513997', a oczekiwano '513991'
8 wiersz 1: wczytano '500000500000', a oczekiwano '265159214416'
9 wiersz 1: wczytano '500000500000', a oczekiwano '1237634347'
10 wiersz 1: wczytano '500000500000', a oczekiwano '274098756558'
wszystkie wczytane zmienne są większe od oczekiwanych, dlatego możliwe, że dla niektórych danych wejściowych nie powinienem zwiększać zmienną 'sum' o zwracaną z funkcji 'subsequentNumbers'
sum += subsequentNumbers( n - box );
Męczę się z tym zadaniem i sam już nie wiem co jest w nim źle, możliwe, że rozumowanie początkowe nie do końca jest prawidłowe, dlatego proszę o podpowiedź.
Kod:
#include <iostream>
using namespace std;
long long subsequentNumbers( long x )
{
long long suma( 0 );
for( int i = 1; i <= x; i++ )
suma += i;
return suma;
}
int main()
{
int n, m, box( 0 ); long long sum( 0 );
cin >> n >> m;
int * c = new int[ n ];
for( int i = 0; i < n; i++ )
cin >> c[ i ];
for( int j = 1; j < n; j++ )
{
if( c[ j ] == c[ j - 1 ] )
{
sum += subsequentNumbers( j - box );
box = j;
}
}
sum += subsequentNumbers( n - box );
cout << sum;
return 0;
}