CSES - Datatähti 2018 alku - Results
Submission details
Task:Bittijono
Sender:inkeri
Submission time:2017-10-10 17:12:59 +0300
Language:C++
Status:COMPILE ERROR

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:34:35: error: conversion from '__gnu_cxx::__alloc_traits<std::allocator<std::array<int, 3ul> > >::value_type {aka std::array<int, 3ul>}' to non-scalar type 'std::array<long long int, 3ul>' requested
       array<ll, 3> arvot = jonot[i];
                                   ^
input/code.cpp:36:33: warning: narrowing conversion of '(arvot.std::array<_Tp, _Nm>::operator[]<long long int, 3ul>(0ul) + arvot.std::array<_Tp, _Nm>::operator[]<long long int, 3ul>(1ul))' from 'std::array<long long int, 3ul>::value_type {aka long long int}' to 'int' inside { } [-Wnarrowing]
       jonot.push_back({arvot[0] + arvot[1], arvot[1], arvot[1] + arvot[2]});
                                 ^
input/code.cpp:36:75: warning: narrowing conversion of 'arvot.std::array<_Tp, _Nm>::operator[]<long long int, 3ul>(1ul)' from 'std::array<long long int, 3ul>::value_type {aka long long int}' to 'int' inside { } [-Wnarrowing]
       jonot.push_back({arvot[0] + arv...

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
//pitää lyhennellä listoja jotenkin
int main() {
ll tavoite;
cin >> tavoite;
if (tavoite == 1) {
cout << tavoite << endl;
return 0;
}
ll pituus = 1;
ll maara = 1;
ll prev0 = 2;
ll prev1 = 1;
while (maara < tavoite) {
pituus++;
if (pituus % 2 == 1) {
maara += prev1;
prev0 += prev1;
} else {
maara += prev0;
prev1 += prev0;
}
}
ll loppu = pow(2, pituus - 2);
vector<array<int, 3>> jonot;
jonot.push_back({0, 0, 0});
jonot.push_back({1, 2, 1});
for (int i = 1; i < loppu; i++) {
array<ll, 3> arvot = jonot[i];
//lisätään 0
jonot.push_back({arvot[0] + arvot[1], arvot[1], arvot[1] + arvot[2]});
//lisätään 1
jonot.push_back({arvot[0] + arvot[2], arvot[1] + arvot[2], arvot[2]});
}
int i = loppu;
while (true) {
array<int, 3> arvot = jonot[i];
// cout << i << endl;
if (arvot[0] + arvot[1] == tavoite) {
string jono = bitset<64>(2*i).to_string();
pituus = log(2*i)/log(2) + 1;
jono.erase(0, 64 - pituus);
cout << jono << endl;
return 0;
} else if (arvot[0] + arvot[2] == tavoite) {
string jono = bitset<64>(2*i+1).to_string();
pituus = log(2*i)/log(2) + 1;
jono.erase(0, 64 - pituus);
cout << jono << endl;
return 0;
}
//lisätään 0
jonot.push_back({arvot[0] + arvot[1], arvot[1], arvot[1] + arvot[2]});
//lisätään 1
jonot.push_back({arvot[0] + arvot[2], arvot[1] + arvot[2], arvot[2]});
i++;
}
}