1 / 6
Apr 2021

Dzień Dobry, proszę o podpowiedź - dostaję komunikat "przekroczono limit czasu"
Nie mam zupełnie pomysłu gdzie szukać i co zmienić.
zadanie :https://pl.spoj.com/problems/FR_12_12/22
mój kod
#include
using namespace std;
int main()
{
int d = 0,licznik=0,i=0,j=0;
long int wierz = 0;
cin >> d;
while (d–)
{
cin >> wierz;
for (i = 0; i <= wierz; i++)
{
for (j = 0; j <= wierz; j++)
{
if (((i % 4) == 0) && ((j % 3) == 0))
{
if (i + j == wierz)
{
licznik++;
}
; }
}
}
cout << licznik << endl;
licznik = 0;
}
return 0;

}

  • created

    Apr '21
  • last reply

    Jun '22
  • 5

    replies

  • 547

    views

  • 4

    users

  • 3

    links

  1. operacja reszta z dzielenia w petli jest dosc czasochlonna operacja. istnieje mozliwosc inkrementowania o odpowiednia ilosc.
  2. gdy liczba kwadratow rosnie trojkatow bedzie mniej. tu moze byc troche kombinowania.
  1. Czy warto odpowiadać, gdy pytający nie potrafi wkleić do pytania poprawnie swojego kodu?
  2. Poszukaj i poczytaj o bruteforce, [np https://pl.wikipedia.org/wiki/Wyszukiwanie_wyczerpujące8]
    Nie ma nic złego w tej metodzie, jeżeli nie masz żadnego innego pomysłu, jako wstęp do rozwiązania problemu - jako pierwszy krok, ale często kończy się to przekroczeniem limitu czasu. Potestuj dla np:
    1
    1000000000,
    a pamiętaj, miej świadomość, że testów jest 100 razy więcej.

Trzy “pełne” zagnieźdzone pętle:

while (d–) 
  // ...
  for (i = 0; i <= wierz; i++)
    // ...
    for (j = 0; j <= wierz; j++)
      // ...

To w tym zadaniu dużo za dużo, a dokładniej o co najmniej dwie, za dużo.

Zwiększenie inkrementacji zamiast i++, do i=i + 4 oraz odpowiednio do j=j+3 nie pomogło - ten sam komunikat.
Jeżeli nie na siłę to pewnie nie trzeba sprawdzać wszystkich możliwości a znaleźć więcej prawideł które opisuje prawidłową odpowiedź i to opisać if’ami . Odezwę się jak coś wymyślę - na razie bardzo dziękuję za podpowiedzi.

1 year later

Czy da się to jakoś przyspieszyć?

    cout<<tab[t%12]+t/12<<'\n';

PS.
oczywiście używam

std::ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);