infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Airinei Adrian din Aprilie 06, 2008, 14:32:43



Titlul: 691 Fibo
Scris de: Airinei Adrian din Aprilie 06, 2008, 14:32:43
Aici puteţi discuta despre problema Fibo (http://infoarena.ro/problema/fibo).


Titlul: Răspuns: 691 Fibo
Scris de: Andrici Cezar din Aprilie 25, 2008, 14:46:20
ce are problema mea ........ nu inteleg de loc :readthis:


Titlul: Răspuns: 691 Fibo
Scris de: Andrei Grigorean din Aprilie 25, 2008, 14:49:00
Numerele nu incap pe longint. Trebuie sa implementezi numere mari. Gasesti un articol care sa te ajute aici (http://infoarena.ro/multe-smenuri-de-programare-in-cc-si-nu-numai).


Titlul: Răspuns: 691 Fibo
Scris de: Andrici Cezar din Aprilie 25, 2008, 18:17:59
am incecat si imi da eroare de compilare??? am incercat int64
dar nu merge ](*,)


Titlul: Răspuns: 691 Fibo
Scris de: Gabriel Bitis din Aprilie 25, 2008, 20:13:50
int64 nu inseamna numere mari.
Retine numerele sub forma de vectori.


Titlul: Răspuns: 691 Fibo
Scris de: Andrici Cezar din Aprilie 26, 2008, 10:03:19
ms am luat 50 puncte... dati-mi si mie niste teste mai mare sa vad daca imi da bn... adica 1000000, 500000,600000,etc


Titlul: Răspuns: 691 Fibo
Scris de: razyelx din Mai 02, 2008, 11:10:42
Nr-ele nu sunt deloc mari. Maximul nu depaseste 1 000 000 asta inseamna ca iti intra in long, dar inseamna mult mai mult de atat. Daca chiar vrei sa incerci foloseste long long.
Iar nr-ele de forma palindrom sunt destul de putine. Ok cred ca ti-am dat destule indicii. Bafta!


Titlul: Răspuns: 691 Fibo
Scris de: Florian Marcu din Mai 30, 2008, 22:22:33
Generez toate numerele in baza doi ( cu reprezentarile binare ale unui contor de la 1 la 2^16). Reprezentarile binare care sunt palindroame le transform in numar in baza 10 [considerandu`le scrise in sistem fibo), iar daca numerele in baza 10 sunt mai mici ca n, incrementez solutia. Problema e ca iau WA. Nu inteleg de ce ar fi nevoie de numere mari [reprezentarea binara o tin sub forma de vector]. Poate cineva sa ma ajute? Problema e banala, insa ...


Titlul: Răspuns: 691 Fibo
Scris de: Andrei Purice din Mai 30, 2008, 22:53:00
Tu generezi toate posibilitatile pana la 2^16.
Poti incerca altceva: sa generezi doar jumatate din numar si apoi sa ii faci oglinda pastrand complexitatea ;)

Prin "Oglinda" ma refer la:
ai generat 10010
oglinda care o faci tu va fi: 10010 + 01001 sau 1001 0 + 1001 din astea iti vor iesi palindroamele:
1001001001
100101001


Titlul: Răspuns: 691 Fibo
Scris de: Florian Marcu din Mai 31, 2008, 11:21:20
Intr-adevar. E buna indicatia. Multumesc. Totusi, nu inteleg de ce 010 nu este luat in considerare in exemplu.... Poate cineva sa ma lamureasca?


Titlul: Răspuns: 691 Fibo
Scris de: Airinei Adrian din Mai 31, 2008, 11:37:33
In general numerele incep cu o cifra nenula.


Titlul: Răspuns: 691 Fibo
Scris de: gaboru corupt din Mai 31, 2008, 14:20:17
daka imi da eroarea

Citat
user.cpp:47: error: 'strrev' was not declared in this scope

inseamna ca nu are compilatoru functia strrev ?


Titlul: Răspuns: 691 Fibo
Scris de: Airinei Adrian din Mai 31, 2008, 14:38:04
Da, strrev nu este ANSI C.


Titlul: Răspuns: 691 Fibo
Scris de: gaboru corupt din Iunie 17, 2008, 17:55:18
am facut un fel de brute la problema asta... am luat toate numerele de la 1 la 1 mil, leam transformat in baza 2, leam facut in baza fibonaci si daca erau mai mici ca N incrementam ceva. iau TLE pe 7 teste, deci iau 40 de pct. am incercat sa fac si cu preprocesare... tot asa, iau un iterator de la 1 la un milion si bag numerele intrun vector. de aici fac o cautare binara la cel mai mare numar mai mic decat N si afisez pozitia lui. de ce nu stiu, dar mie imi baga in vector doar pana pe la 17000. o idee sau daca am ceva gresala la implementare. merci anticipat :thumbup: off-topic: HAI ROMANIA!!! :medieval:

LE: cu a doua varianta iau 50 de pct.

LE2: am luat in sfarsit 100. ideea e ca la ultimul test N depaseste 1 milion ](*,)


Titlul: Răspuns: 691 Fibo
Scris de: Alexandru Gherghe din Ianuarie 02, 2011, 00:18:07
Ce as putea sa mai imbunatatesc la sursa asta ca sa imi iasa si ultimul test, ca practic solutia e cea oficiala..
Cod:
#include<cstdio>  
#include<cstring>
#include<bitset>

using namespace std;
 
#define DIM 31

int N, M=30, sol=1;

int fib[DIM] = {0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269};
 
inline int verif(int val) { 
    int max=0; 
register int i=M;
bitset <DIM> aux;

while(val<fib[i])
--i;
val-=fib[i]; aux[i]=1; 
if(i>max)
max=i;

for(; i && val; --i) { 
while(val<fib[i])
--i;
val-=fib[i]; 
aux[i]=1; 


for(i=1; i<=max/2; ++i)
if(aux[i]!=aux[max-i+1]) return 0; 

return 1;

 
int main() {
    freopen("fibo.in","r",stdin); 
    freopen("fibo.out","w",stdout); 
     
    register int i;

scanf("%d",&N); 
     
    for(i=2; i<=N; ++i) 
        sol+=verif(i);   
     
    printf("%d\n",sol); 
 
    return 0; 


Titlul: Răspuns: 691 Fibo
Scris de: Pirtoaca George Sebastian din Septembrie 23, 2011, 14:51:29
Cat trebuie sa dea pentru 1 000 000 ? Multumesc anticipat! :D


Titlul: Răspuns: 691 Fibo
Scris de: Simoiu Robert din Septembrie 23, 2011, 17:40:37
Cod:
1795


Titlul: Răspuns: 691 Fibo
Scris de: FMI Razvan Birisan din Februarie 14, 2013, 13:22:03
10x :thumbup: