LASCALE - Quả Cân

Tác giả: ll931110

Ngôn ngữ: C++

#include <iostream>
#include <vector>
using namespace std;

int m;
vector<int> v[2];
vector<int> pw;

int main()
{
//    freopen("scale.in","r",stdin);
//    freopen("scale.ou","w",stdout);
    scanf("%d", &m);
    int low = 1;
    while (1)
    {
        pw.push_back(low);
        if (low >= m) break;
        low *= 3;
    };
    int delta = m,now = 1;
    for (int i = pw.size() - 1; i >= 0; i--) 
    {
      if (delta == 0) break;     
      if (pw[i] < delta)
      {
            delta -= pw[i];  v[now].push_back(pw[i]);
      }
      else
      {
            if (pw[i] > 2 * delta) continue;                        
            delta = pw[i] - delta;
            v[now].push_back(pw[i]);  now ^= 1;
      };
    };
    for (int i = 0; i < 2; i++)
    {
        printf("%d ", v[i].size());
        for (int j = v[i].size() - 1; j >= 0; j--) printf("%d ", v[i][j]);
        if (!i) printf("\n");
    };
};

Download