Mam poważny problem z takim zadaniem: https://szkopul.edu.pl/problemset/problem/jzCvm_VOCX4120OGdoLq7RuQ/site/?key=statement
3 godzinę już debuguję, i nie mogę znaleźć błędu. W połowie testów dostaję wrong answer (za duże odpowiedzi wypisuje mój program) i w kilku signal 6 / 11.
Kompletnie nic mi nie przychodzi do głowy co jest źle, bo kod wydaje się byc bardzo krótki / prosty. Poprostu dla każdej akcji biorę największy, gdzie kiedykolwiek była - najmniejszy, gdzie kiedykolwiek była.
Kod, zmienna KTR oznacza numer akcji, którą aktualnie dodajemy, numeruję akcję od 1,2,3,4...:
#include <iostream>
#include <vector>
using namespace std;
int wyn = 0, KTR = 1;
const int SIZE = 1e6+5;
string ciag;
vector<int> operacje;
int bilans[SIZE] = {0}; // aktualny bilans dla i-tej akcji
int t_max[SIZE] = {0}; // Najwyzsza gora dla i-tej akcji
int t_min[SIZE] = {0}; // Najnizszy dolek dla i-tej akcji
vector<int> wsk; // Wskazniki, ktore akcje sa na danych idx-ach
vector<int> dod; // Jakie beda akcje po zamienieniu w i-tym dniu (to co damy na wsk)
inline void przetwarzaj() // Funkcja ktora ciag wczytany w getlini-ie, tnie na inty i dodaje do vectora operacje.
{
string spr;
for (int i = 0; i < ciag.size(); ++i)
{
if (ciag[i] == ' ')
{
if (!spr.empty())
operacje.push_back(stoi(spr));
spr.clear();
}
else
spr += ciag[i];
}
if (!spr.empty())
operacje.push_back(stoi(spr));
}
int main()
{
// Wynik dla kazdej akcji do max_gora - min_dolek.
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
while(getline(cin,ciag))
{
operacje.clear();
przetwarzaj();
dod.clear();
while(wsk.size() < operacje.size())
{
wsk.push_back(KTR);
KTR++;
}
for (int i = 0; i < operacje.size(); ++i)
{
if (operacje[i] != -99)
{
bilans[wsk[i]] += operacje[i];
t_min[wsk[i]] = min(t_min[wsk[i]],bilans[wsk[i]]);
t_max[wsk[i]] = max(t_max[wsk[i]],bilans[wsk[i]]);
dod.push_back(wsk[i]);
}
}
wsk = dod;
}
for (int i = 0; i < SIZE; ++i)
wyn = max(wyn, t_max[i] - t_min[i]);
cout << wyn << '\n';
return 0;
}
Możliwe, że źle rozumiem treść, bo jest ona moim zdaniem fatalnie napisana, ale jeśli dostejemy -99, to już tej akcji nie używamy, a kolejnych przesuwamy wszystkie o jeden w lewo.
Z góry dziękuję za pomoc i poświęcony czas!