Jump to content

Miss and Mister B-Zone - Editia 5 a început. Te poți înscrie aici

Sign in to follow this  
shanker'

Probleme pbinfo

Recommended Posts

E cineva pe aici ce rezolvă probleme pe pbinfo când plictiseala îl depășește? PM privat atunci :)

 

A reușit cineva să obțină 100 de puncte la problema https://www.pbinfo.ro/?pagina=probleme&id=1192 ?

 

Am creat următoarea chinezărie, însă chiar nu-mi pot da seama cum altcumva să rezolv problema pt. a „optimiza” programul (Apelurile de functii sunt 0, deci nu contează că am creat multe funcții)

 

@FnZ, mi silă să-ți dau PM. Ce zici? Sau esti Mate-Info dgb? 😆

 

#include <iostream>
#include <fstream>

using namespace std;

void swap(int *X, int *Y)
{
    int Temp = *X;
    *X = *Y;
    *Y = Temp;
}

void bubbleSort(int Array[], int X)
{
    for (int i=0; i<X; i++)
    {
        for (int j=0; j<X-i-1; j++)
        {
            if (Array[j] < Array[j+1])
                swap(&Array[j], &Array[j+1]);
        }
    }
}

void Conditia_1(int Array[], int X, ofstream &WriteToFile)
{
    for (int i=0; i<X; i++)
    {
        WriteToFile << Array[i] << " ";
        cout << Array[i] << " ";
    }
}

void Conditia_2(int Array[], int X, ofstream &WriteToFile)
{
    cout << endl;
    WriteToFile << endl;

    for (int i=0; i<X; i++)
    {
        if (i == 0)
        {
            cout << "0" << " ";
            WriteToFile << "0" << " ";
            continue;
        }

        if (i == X)
        {
            cout << "0" << " ";
            WriteToFile << "0" << " ";
            break;
        }

        if ((float)(Array[i-1] + Array[i+1])/2 == Array[i])
        {
            WriteToFile << "1" << " ";
            cout << "1" << " ";
        }
        else
        {
            WriteToFile << "0" << " ";
            cout << "0" << " ";
        }
    }
}

void printArray(int Array[], int X, ofstream &WriteToFile, void (*calledFunc)(int [], int, ofstream &))
{
    return (*calledFunc)(Array, X, WriteToFile);
}

int main()
{
    ifstream ReadFromFile ("arhitectura2.in");
    ofstream WriteToFile ("arhitectura2.out");

    long long int X, Numar;
    // cin >> X;
    ReadFromFile >> X;

    int Array[X];

    for (int i=0; i<X; i++)
    {
        // cin >> Numar;
        ReadFromFile >> Numar;
        Array[i] = Numar;
    }

    bubbleSort(Array, X);
    (*printArray)(Array, X, WriteToFile, Conditia_1);
    (*printArray)(Array, X, WriteToFile, Conditia_2);

    ReadFromFile.close();
    WriteToFile.close();
}

Share this post


Link to post
Share on other sites

Am renunțat la bubbleSort, în schimb folosind funcția sort din <algorithm>

 

100 de puncte gratuite here they are!

 

image.thumb.png.143b2a4afa6108442ca75cf85ef671d4.png

 

#include <fstream>
#include <algorithm>

using namespace std;

void Conditia_1(int Array[], int X, ofstream &WriteToFile)
{
    for (int i=0; i<X; i++)
    {
        WriteToFile << Array[i] << " ";
    }
}

void Conditia_2(int Array[], int X, ofstream &WriteToFile)
{
    WriteToFile << "\n";

    for (int i=0; i<X; i++)
    {
        if (i == 0)
        {
            WriteToFile << "0" << " ";
            continue;
        }

        if (i == X)
        {
            WriteToFile << "0" << " ";
            break;
        }

        if ((float)(Array[i-1] + Array[i+1])/2 == Array[i])
        {
            WriteToFile << "1" << " ";
        }
        else
        {
            WriteToFile << "0" << " ";
        }
    }
}

void printArray(int Array[], int X, ofstream &WriteToFile, void (*calledFunc)(int [], int, ofstream &))
{
    return (*calledFunc)(Array, X, WriteToFile);
}

int main()
{
    ifstream ReadFromFile ("arhitectura2.in");
    ofstream WriteToFile ("arhitectura2.out");

    long long int X, Numar;
    ReadFromFile >> X;

    int Array[X];

    for (int i=0; i<X; i++)
    {
        ReadFromFile >> Numar;
        Array[i] = Numar;
    }

    sort (Array, Array+X, greater<int>());
    (*printArray)(Array, X, WriteToFile, Conditia_1);
    (*printArray)(Array, X, WriteToFile, Conditia_2);

    ReadFromFile.close();
    WriteToFile.close();
}

Share this post


Link to post
Share on other sites
Posted (edited)

@shanker'

Proprietatea sirului fibonacci

 

Spre exemplu ai de calculat suma termenilor cu k = [1, 3] atunci vom avea fibo[] = {1, 1, 2, 3, 5, 8, 13, ...}.

Stim ca suma primelor k numere = fibo[k + 2] - 1.

 

Pe exemplul dat k = [1, 3] => S = 4, dar S = fibo[3 + 2] - 1 = 4.

Pentru un alt exemplu k = [3, 5] => S = 10, dar suma aceasta poate fi scrisa ca S = (fibo[5 + 2] - 1) - sigma(3 - 1), unde cu sigma am notat o functie pentru care sigma(n) = fibo[n + 2] - 1.

 

Generalizand pentru un a si b ales arbitrar avem urmatoarea formula de calculare a sumei

S(a, b) = (fibo[b + 2] - 1) - fibo[a + 1] - 1, astfel obtinandu-se

S(a, b) = fibo[b + 2] - fibo[a + 1]

 

 

Atentie: Trebuie sa implementezi niste vectori care iti vor retine cifrele pentru ca daca trebuie sa calculezi pana la 1002-lea termen atunci nu se incadreaza in tipul de date long long sau int.

 

Edited by FnZ
  • Upvote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.