Cześć,
Piszę algorytm na spoxa i niestety w większości nie spełnia on założeń czasowych.
Otóż, mam za zadanie ściągać kolejne cyfry (input) i dodawać je do tablicy.
Możliwe, że to sposób wczytywania jest zbyt wolny i psuje całą kompozycję...
Pierwsza cyfra to wielkość tablicy (ilu wymiarowa) a następne linie to już konkretne dane to tej macierzy.
Korzystam z rozwiązania SAT (summed area table) bo potem muszę policzyć podmacierze.
Robię to tak:
int b = 1;
string s;
string sFirst;
getline(cin, sFirst);
std::istringstream ss(sFirst);
std::istream_iterator<std::string> begin(ss), end;
std::vector<std::string> test(begin, end);
stringstream(test[0]) >> rozmiarTablicy;
for (int i = 0; i < rozmiarTablicy + 1; i++) {
for (int y = 0; y < rozmiarTablicy + 1; y++) {
cout << tab[i][y] << " ";
}
cout << endl;
}
int tab[rozmiarTablicy + 1][rozmiarTablicy + 1];
while (getline(cin, string)) {
std::istringstream ss(s);
std::istream_iterator<std::string> begin(ss), end;
std::vector<std::string> arrayTokens(begin, end);
for (int i = 1; i < rozmiarTablicy + 1; ++i) {
int var;
stringstream(arrayTokens[i - 1]) >> var;
tab[b][i] = var + tab[b - 1][i] + tab[b][i - 1] - tab[b - 1][i - 1];
}
b++;
}
Chodzi o to, że na początku zczytuję jak wymiarowa jest macierz, potem robię o 1 większą o pierwszą kolumnę i wiersz uzupełniam 0 aby później łatwiej było liczyć.
Algorytm ciągnie się trochę dalej ale wydaje mi się, że jak tutaj uda się coś przyspieszyć to dam rade dalej.
Znalazłem ten sposób ponieważ elementy w linii mogą być ujemne a getChar brałbym tylko cyfry, bez znaków.
Bardzo prosiłbym o opinie, krytykę, cokolwiek, najważniejsze aby coś tutaj ugrać z czasem :)