← Back to topics
Topic

Dali je moguce

d
darkspirit
Na zadatak biciklisti stalno dobijam "prekoraceno vremesnko ogranicenje" ali sumljam da je to problem. jer ne koristim rekurzija, rjenje je O(n^2), a nista ne prolazi na vreme.
Dali je moguce da ustvari imam prekoraceno memorisko ogranicenje (jer bas i ne koristim efikasne strukture podatka), a da server po greska vraca problem sa memorijom?
d
darkspirit
Dali na biciklisti prlazi matrica rastojanija ili moram korostiti liste susjednosti?
b
boba5551
Mislim da ti nece proci matrica. Mada, zasto bi je inace koristio. Ti imas n grana u najgorem slucaju, a ne n^2, zar ne?
d
darkspirit
Dali je moguce da poraka glasi "sistemska greska ili prekoraceno memorisko ogranicenje" a ustvari da je problem sa vremenskom?
b
boba5551
Malo teze... Gledao sam test primere i oni na kojima dobijas imaju n tacno 8000, a svi ostali (koji ti i na vremenu pucaju) imaju manje od 8000.
d
darkspirit
ma ne, ovo sam pitao oko polinoma, jer ne mogu razumeti kako je moguce da postoi nesto brze is ovo sta ja radim.
b
boba5551
I pitas u temi o biciklistima :)
Sta ti radis sa polinomima? Koja je vremenska slozenost?
d
darkspirit
Pa radim ovo: racunam ostatke pojedinih stepena, a kao sto radim to, racunam i sumu i to pamtim. Prvi put kad se pojavi ostatak 1 (ako se pojavi) racunam koliko takvi grupe ima, mnozim to i sumiram za ostatka (one poslednje stepene koi ne formiraje cielosnu grupu) Ako broj 1 ne se pojavlja kao ostatak, to znci da ne ce bude povtaranja ostatka, i mora da se ide do kraj. Evo i kod, pa obrisete ga po nekoliko dana kad iskomentisete:


#include <iostream>
#include <vector>
using namespace std;
int i,j,k,l,n,m,a,odg;
int ost[100];
int res[100];
int main()
{
scanf("%d%d%d",&amp;a,&amp;n,&amp;m);
bool proverka=false;
bool t=true; k=0; res[0]=1; ost[0]=1;
while (t==true)
{
k++;
if (k<=n)
{
ost[k]=(ost[k-1]*a)%m;
if (ost[k]!=1) res[k]=(res[k-1]+ost[k])%m; else {t=false; proverka=true;}
}
if (k>n) t=false;
}

if (proverka==true)
{
k--;
l=(n+1)%(k+1);
odg=res[k]*(int((n+1)/(k+1)))+res[l];
printf("%d\n",odg%m);
}
else cout<<res[k-1]%m<<"\n";
return 0;
}


b
boba5551
Mozda gresim sa ovim zadatkom, tacnije ne razumem tvoj kod, pa pre nego sto te uputim dalje, hajde probaj na tvom racunaru za test primer
A = N = 10^9, a M = 123456789 - nije ni bitno