mateczek |
» 2017-10-28 21:22:18 wiem, że niektóre sprawdzarki są tak zrobione, że cout<< nie przechodzi i trzeba użyć print () szczególe jeśli zadanie pochodzi z mainedu czy innego takiego oficjalnego |
|
jankowalski25 |
» 2017-10-28 21:26:08 Czasami wystarczy dołożyć std::ios::sync_with_stdio( false ); |
|
jatoprzechuj Temat założony przez niniejszego użytkownika |
» 2017-10-28 22:28:28 Mam już dołożone std::ios::sync... Ta sprawdzarka przy innych zadaniach normalnie działała z coutem. |
|
mateczek |
» 2017-10-28 22:59:05 no to albo dasz link do zadania i może ktoś luknie o co tam chodzi albo "wróżbita maciej" |
|
garlonicon |
» 2017-10-28 23:00:49 Oprócz tego, co wymieniłem wcześniej, to jeszcze można zauważyć, że wartości modulo się powtarzają, więc dla małych m da się to jeszcze przyspieszyć biorąc pod uwagę długość okresu - czytaj: Pisano period. W takim przypadku jeśli na przykład m == 2 , to reszty tworzą ciąg: { 0, 1, 1, 0, 1, 1, 0, 1, 1,...} , czyli wystarczy wiedzieć, że jego długość wynosi 3 i obliczyć wartość dla n % 3 zamiast dla n . |
|
jatoprzechuj Temat założony przez niniejszego użytkownika |
» 2017-10-29 11:53:02 Nie mogę dać linka bo to jest zamknięta platforma, tresc zadania jest w pierwszym poście lecz są jeszcze limity: | Time: 1 s | Memory: 2 MB | |
|
mateczek |
» 2017-10-30 08:21:07 spróbuj użyć funkcji "C" jeśli i to nie pomoże to pokombinuj z optymalizacją i wykorzystaniem okresowości jak radził garlonicon. Aczkolwiek jeśli "n" ma mieć max 100 to pętla do stu nie powinna być jakoś specjalnie zasobożerna #include <iostream> using namespace std; int main() { int t, n, m; scanf( "%d", & t ); while( t-- ) { scanf( "%d %d", & n, & m ); int an_1 = 1, an_2 = 1, an = 1; for( int i = 3; i <= n; i++ ) { an =( an_2 + an_1 ) % m; an_2 = an_1; an_1 = an; } printf( "%d\n", an ); } return 0; }
|
|
garlonicon |
» 2017-10-30 13:02:58 A jeśli to nadal nie wystarczy, to napisz odpowiedni szablon (wtedy obliczenia nastąpią w czasie kompilacji), a później tylko wypisz wynik. Możesz zacząć od czegoś takiego: #include <iostream>
template < unsigned int n > struct fibonacci { enum { value = fibonacci < n - 1 >::value + fibonacci < n - 2 >::value }; };
template <> struct fibonacci < 0 > { enum { value = 0 }; };
template <> struct fibonacci < 1 > { enum { value = 1 }; };
int main() { std::cout << fibonacci < 5 >::value; } Oczywiście to jest tylko najprostsza wersja pokazująca, o co chodzi. Aby to zadziałało w praktyce, trzeba nieco inaczej to zapisać tak, aby wywołanie fibonacci < 100 >::value miało jakiś sens. Trzeba również uwzględnić resztę z dzielenia (wewnątrz szablonu, może coś w stylu fibonacci < n, m >::value , gdzie n i m będą zawsze stałymi czasu kompilacji). |
|
1 2 « 3 » 4 5 6 7 |