Oji 2004 clasa 6-a problema 2...


Problema 2. "Vânătoare" 100
puncte




Vânătorul şef al regelui
Arthur a primit însărcinare să vâneze primele raţe ce se întorc din ţările
calde. Regele fiind un tip cu idei fixe, i-a cerut vânătorului să vâneze raţele
albe cu săgeţi albe, iar raţele negre cu săgeţi negre.

Raţele vin în rânduri
(stoluri) din ce în ce mai mari: mai întâi una, apoi două, trei, cinci, opt,
treisprezece, ş.a.m.d. Se observă că numărul de raţe dintr-un rând este egal cu
numărul de raţe de pe cele două rânduri anterioare. Raţele fiind nişte creaturi
ordonate zboară în rânduri, în care nu vei putea găsi două raţe de aceeaşi
culoare alăturate, fiecare rând începând cu o raţă albă.

Vânătorul
ştie că dacă a început să doboare o raţă, trebuie să le doboare pe toate
de pe rândul acesteia, deoarece supravieţuitoarele vor alerta celelalte raţe şi
ele nu se vor mai întoarce niciodată, iar vânătorul nostru îşi va pierde
slujba.




Cerinţă

Ştiind că vânătorul a primit
ka săgeţi albe şi kb săgeţi negre, trebuie să determinaţi
câte rânduri de raţe a doborât şi câte săgeţi de fiecare tip i-au rămas, ştiind
că el vrea să-şi păstreze slujba.




Date de
intrare

Se citesc de la tastatură numerele ka şi kb (în această ordine).

Atenţie:
Valorile se introduc obligatoriu în această ordine!



Date de
ieşire

Se va afişa pe ecran:

- numărul de rânduri doborâte

- numărul de săgeţi albe rămase

- numărul de săgeţi negre rămase.



Restricţii

0≤ka,
kb≤2.000.000.000




Observaţie

Datele de intrare sunt
corecte (nu necesită validare).



Exemplu

Pentru ka=9
şi kb=10


Se va afişa:

4

2

6

Explicaţie

Pentru exemplu avem rândurile (A- raţă albă, N- raţă neagră) de raţe:

A

A N

A N A

A N A N A



Timp maxim de executare: 1 secundă/test

1

Răspunsuri

2014-02-23T19:36:14+02:00
Using namespace std;
#include <fstream>
ifstream f ("vanatoare.in");
ofstream g ("vanatoare.out");
int main()
{   
int ka, kb, x=1, i=0, y=2,ok=0,z;
    f>>ka>>kb;   
if (ka-1>=0)   
{
        i++;       
        ka--;   
 }   
 if (ka-1>=0 && kb-1>=0)   
{
        i++;       
        ka--;       
        kb--;
 }   
 while (ok==0)   
{       
         z=x+y;       
         if (z%2==0)       
         {           
                   if (ka-z/2>=0 && kb-z/2>=0)           
                   {               
                                ka=ka-z/2;               
                                kb=kb-z/2;               
                                i++;           
                    }           
                    else ok=1;       
           }       
          else       
          {           
                      if (ka-(z/2+1)>=0 && kb-z/2>=0)           
                      {               
                                 ka=ka-(z/2+1);               
                                 kb=kb-z/2;               
                                 i++;           
                       }           
                       else ok=1;       
            }       
           x=y;       
           y=z;   
}   
g<<i<<'\n'<<ka<<'\n'<<kb;   
f.close ();   
g.close ();
return 0;
}
1 5 1