Dzień dobry
Mam problem z poniższym zadaniem. Po wrzuceniu rozwiązania do sprawdzarki "themis" otrzymuje 1 na 3 sprawdzenia pozytywne. Próby nie zaliczone wyrzucają komunikat "wrong answer". Poniżej treść zadania i mój kod.
Treść zadania:
Stokrotki
Problem code: STO1 | Limits: 2 s, 32 MB
Dana jest tablica o rozmiarach n x m. Elementami tej tablicy są liczby całkowite. Drogą przez tablicę nazywamy m-elementowy ciąg liczb a0,a1,…,am-1 ze zbioru {0,1,2,...,n-1}, taki, że ai-1 - 1 ≤ ai ≤ ai-1 + 1 dla każdego i > 0. Oznacza ona ciąg pól tablicy o współrzędnych (ai, i). Jak łatwo zauważyć, droga :zaczyna się w pierwszej kolumnie (w dowolnym wierszu),
w kolejnych krokach przechodzi przez kolejne kolumny dla i=0,…,m-1, a numer wiersza w każdym kroku może zmienić się nie więcej niż o jeden,
kończy się w ostatniej kolumnie (w dowolnym wierszu).
Kosztem drogi nazywamy sumę liczb znajdujących się na polach, przez które ona przechodzi.Wejście
W pierwszym wierszu podana jest liczba naturalna c określająca liczbę zestawów danych. Każdy zestaw zapisany jest w dwóch wierszach. W pierwszym z nich znajdują się dwie liczby n, m – wymiary tablicy (odpowiednio: liczba wierszy i liczba kolumn), oba nie większe od 1000; w drugim – m*n elementów tablicy (pierwszych m liczb to elementy pierwszego wiersza czytane od lewej do prawej, kolejnych m liczb to elementy drugiego wiersza, itd.).Wyjście
Należy wypisać c wierszy. W i-tym wierszu ma znaleźć się jedna liczba określająca, koszt najtańszej drogi w i-tej tablicy.Przykład
Dla danych wejściowych
1
2 3
43 76 30 55 66 55
poprawną odpowiedzią jest
139Uwaga:
Dane w przykładzie odpowiadają tablicy:
43 76 30
55 66 55
Najtańsza droga prowadzi przez pola zawierające liczby: 43, 66, 30.
Mój kod:
#include <iostream>
using namespace std;
int smaller(int a, int b){
int small = a;
if(b < a){
small = b;
}
return small;
}
int main(){
int x;
cin>>x;
int y, z;
int*** array = new int**[x];
int *ySize = new int[x];
int *zSize = new int[x];
for (int i = 0; i < x; i++){
cin>>y>>z;
array[i] = new int*[y];
ySize[i] = y;
zSize[i] = z;
for (int j = 0; j < y; j++){
array[i][j] = new int[z];
}
for (int j = 0; j < y; j++){
for (int k = 0; k < z; k++){
int number = 0;
cin>>number;
array[i][j][k] = number;
}
}
}
for (int i = 0; i < x; i++){
for (int j = 0; j < ySize[i]-1; j++){
int result = 0;
for (int k = 0; k < zSize[i]; k++){
result += smaller(array[i][j+1][k], array[i][j][k]);
}
cout<<result<<endl;
}
if(y <= 1 || z <= 1){
int result = 0;
for (int j = 0; j < ySize[i]; j++){
for (int k = 0; k < zSize[i]; k++){
result += array[i][j][k];
}
}
cout<<result<<endl;
}
}
for (int i = 0; i < x; i++){
for (int j = 0; j < ySize[i]; j++){
delete[] array[i][j];
}
delete[] array[i];
}
delete[] array;
return 0;
}