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

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:21:17: error: expected ';' before ':' token
       summa += a:
                 ^

Code

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

int main() {
  ll tavoite;
  cin >> tavoite;
  if (tavoite == 1) {
      cout << tavoite << endl;
      return 0;
  }
  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:
  }
  deque<array<ll, 4>> jonot;
  ll lyhinPituus = 40;
  ll lyhimmanArvo = 0;
  //summa, prev0, prev1, arvo
  jonot.push_back({1, 2, 1, 1});
  for (ll i = 1; i < pow(2, pituus - 2); i++) {
      //cout << jonot.size() << endl;
      array<ll, 4> arvot = jonot.front();
      jonot.pop_front();
      //lisätään 0
      jonot.push_back({arvot[0] + arvot[1], arvot[1], arvot[1] + arvot[2], arvot[3]*2});
      //lisätään 1
      jonot.push_back({arvot[0] + arvot[2], arvot[1] + arvot[2], arvot[2], arvot[3]*2+1});
  }
  while (jonot.size() > 0) {
      //cout << jonot.size() << endl;
      array<ll, 4> arvot = jonot.back();
      jonot.pop_back();
      ll maara1 = arvot[0] + arvot[1];
      ll arvo1 = 2 * arvot[3];
      ll jononPituus1 = log(arvo1)/log(2) + 1;
      ll maara2 = arvot[0] + arvot[2];
      ll arvo2 = arvo1 + 1;
      ll jononPituus2 = log(arvo2)/log(2) + 1;
      if (maara1 == tavoite) {
          if (jononPituus1 == pituus) {
              string jono = bitset<64>(arvo1).to_string();
              jono.erase(0, 64 - pituus);
              cout << jono << endl;
              return 0;
          } else if (jononPituus1 < lyhinPituus) {
              lyhinPituus = jononPituus1;
              lyhimmanArvo = arvo1;
          }
      } if (maara2 == tavoite) {
          if (jononPituus2 == pituus) {
              string jono = bitset<64>(arvo2).to_string();
              jono.erase(0, 64 - pituus);
              cout << jono << endl;
              return 0;
          } else {
              if (jononPituus2 < lyhinPituus) {
                  lyhinPituus = jononPituus2;
                  lyhimmanArvo = arvo2;
              }
          }
      } if (maara1 < tavoite && jononPituus1 < lyhinPituus) {
          jonot.push_back({maara1, arvot[1], arvot[1] + arvot[2], arvo1});
      } if (maara2 < tavoite && jononPituus2 < lyhinPituus) {
          jonot.push_back({maara2, arvot[1] + arvot[2], arvot[2], arvo2});
      }
  }
  string jono = bitset<64>(lyhimmanArvo).to_string();
  jono.erase(0, 64 - lyhinPituus);
  cout << jono << endl;
}