CSES - Datatähti 2018 alku - Results
Submission details
Task:Bittijono
Sender:inkeri
Submission time:2017-10-11 19:25:29 +0300
Language:C++
Status:COMPILE ERROR

Compiler report

input/code.cpp: In function 'std::array<long long int, 2ul> lyhinjono(ll, ll, ll, ll, ll, ll, ll)':
input/code.cpp:13:36: error: 'length' was not declared in this scope
     if (kokonaissumma > tavoite || length >= raja) {
                                    ^
input/code.cpp: In function 'int main()':
input/code.cpp:49:10: error: 'struct std::array<long long int, 2ul>' has no member named 'erase'
     jono.erase(0, 30 - jono[1]);
          ^
input/code.cpp:50:13: error: cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'
     cout << jono << endl;
             ^
In file included from /usr/include/c++/4.8/istream:39:0,
                 from /usr/include/c++/4.8/sstream:38,
                 from /usr/include/c++/4.8/complex:45,
                 from /usr/include/c++/4.8/ccomplex:38,
                 from /usr/include/x86_64-linux-gnu/c++/4.8/bits/stdc++.h:52,
                 from input/code.cpp:1:
/usr/include/c++/4.8/ostream:602:5: error:...

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

//tavoite: tavoiteltava summa
//lista: lisätyt luvut
//viimeinen: listan viimeinen luku
//summa: lisättävä summa jos lisätään eri luku kuin viimeinen
//kokonaisSumma: listan kokonaissumma
//raja: raja listan pituudelle (missä vaiheessa lopetetaan etsintä)

array<ll,2> lyhinjono(ll tavoite, ll arvo, ll viimeinen, ll summa, ll kokonaissumma, ll raja, ll pituus) {
    if (kokonaissumma > tavoite || length >= raja) {
        return {0,0};
    }
    if (kokonaissumma == tavoite) {
        return {arvo, pituus};
    }
    pituus++;
    //lisätään eri luku, arvo kasvaa summalla
    array<ll, 2> jono1 = lyhinjono(tavoite, arvo + summa, summa, summa + viimeinen, kokonaissumma + summa, raja, pituus);
    if (jono1[0] != 0) {
        raja = pituus;
    }
    //lisätään sama luku, arvo kasvaa samalla kuin viimeksi
    array<ll, 2> jono2 = lyhinjono(tavoite, arvo + summa, viimeinen, summa + viimeinen, kokonaissumma + viimeinen, raja, pituus);
    if (jono2[0] != 0) {
        return jono2;
    }
    return jono1;
}

int main() {
    ll tavoite;
    cin >> tavoite;
    ll pituus = 1;
    ll summa = 1;
    ll a = 1;
    ll b = 1;
    while (summa < tavoite) {
        pituus++;
        ll c = a;
        a += b;
        b = c;
        summa += a;
    }
    array<ll, 2> jono = lyhinjono(tavoite, 1, 1, 2, 1, pituus + 2, 1);
    string bittijono = bitset<30>(jono[0]).to_string();
    jono.erase(0, 30 - jono[1]);
    cout << jono << endl;
}