Rezolvare completă PbInfo #1031 Culori2

Pasiunea Mirunei este să coloreze. Vacanţa trecută şi-a petrecut-o la bunica ei la ţară şi pentru că se cam plictisea s-a gândit să vopsească gardul de la casa bunicii.

Gardul este compus din N scânduri dispuse una lângă alta. Miruna a găsit în garajul bunicii 5 cutii de vopsea de culori diferite: albă, albastră, roşie, verde şi galbenă. Când a vopsit gardul, Miruna a respectat următoarele reguli:
  1. Dacă o scândură era vopsită cu alb, următoarea scândură o vopsea obligatoriu cu albastru
  2. Dacă o scândură era vopsită cu albastru, atunci următoarea scândură o vopsea cu alb sau roşu
  3. Dacă o scândură era vopsită cu roşu, atunci următoarea scândură o vopsea cu albastru sau verde
  4. Dacă o scândură era vopsită cu verde, atunci următoarea scândură o vopsea cu roșu sau galben
  5. Dacă o scândură era vopsită cu galben, atunci următoarea scândură o vopsea obligatoriu cu verde

După ce a și-a terminat treaba Miruna își admira “opera de artă” și se întreba în câte moduri diferite ar fi putut să vopsească gardul bunicii.

Cerința

Ajutați-o pe Miruna să găsească răspunsul la întrebarea sa.

Date de intrare

Fișierul de intrare culori2.in conține pe prima sa linie un singur număr natural N (1 ≤ N ≤ 5000).

Date de ieșire

Fișierul de ieșire culori2.out va conţine pe prima sa linie un singur număr întreg reprezentând numărul de moduri diferite în care Miruna ar fi putut să vopsească gardul bunicii.

Restricții și precizări

  • 1 ≤ N ≤ 5000
  • Pentru 25% dintre teste N≤45.

Exemplu

culori2.in

4

culori2.out

24

Explicație

Gardul poate fi vopsit astfel:
(alb,albastru,alb,albastru); (alb,albastru,rosu,albastru);
(alb,albastru,rosu,verde); (albastru,alb,albastru,alb);
(albastru,alb,albastru,rosu); (albastru,rosu,albastru,alb);
(albastru,rosu,albastru,rosu); (albastru,rosu,verde,rosu);
(albastru,rosu,verde,galben); (rosu,albastru,alb,albastru);
(rosu,albastru,rosu,albastru); (rosu,albastru,rosu,verde);
(rosu,verde,rosu,albastru); (rosu,verde,rosu,verde);
(rosu,verde,galben,verde); (verde,rosu,albastru,alb);
(verde,rosu,albastru,rosu); (verde,rosu,verde,rosu);
(verde,rosu,verde,galben); (verde,galben,verde,rosu);
(verde,galben,verde,galben); (galben,verde,rosu,albastru);
(galben,verde,rosu,verde); (galben,verde,galben,verde).

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Culori2:

// prof. Carmen Popescu - Col. Nat. Gh. Lazar Sibiu
#include <fstream>

using namespace std;

ifstream f("culori2.in");
ofstream g("culori2.out");

int n;
string s;

void s_la_p(int p)
{
    string::iterator it;
    string::reverse_iterator rit;

    int i,t,c;
    
    for (i=1;i<=p;i++)
    {
        t=0;
        for ( it=s.begin() ; it<s.end(); it++)
        {   
            c=(*it)-'0';
            c=c*3+t;
            t=c/10;
            c=c%10;
            (*it)=c+'0';
        }
        if (t>0)
            s += t+'0';
    }
    for ( rit=s.rbegin(); rit<s.rend(); rit++)
        g<<(*rit);
    g<<"\n";
}

int main()
{
    int k;
    f>>n;
    if (n==1)
        g<<"5\n";
    else
        if (n==2)
            g<<"8\n";
        else
            if (n==3)
                g<<"14\n";
            else
            {
                if (n%2==0)
                    s="8";
                else
                    s="41";
                k=n/2;
                s_la_p(k-1);
            }
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #1031 Culori2

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1031 Culori2 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!