Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // TaskF.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <vector>
- #include <bitset>
- #include <iostream>
- #include <utility>
- #include <map>
- std::map<unsigned long long, unsigned __int64> table;
- std::vector<unsigned long long> snum(40);
- std::vector<unsigned long long> result;
- int _tmain(int argc, _TCHAR* argv[])
- {
- unsigned __int64 st = 1;
- unsigned __int64 nn = 1024;
- unsigned __int64 tmp;
- unsigned __int64 i, k, n = 32;
- unsigned long long res;
- k = 1i64 << n;
- for (auto index = 0; index < n; index++)
- {
- snum[index] = st;
- st *= 3;
- }
- for (i = 1; i<k - 1; i++)
- {
- tmp = i;
- res = 0;
- for (auto index = 0; index < n; index++)
- {
- if (tmp % 2)
- res += snum[index];
- tmp /=2;
- }
- table.insert(std::make_pair(res, i));
- if (!(i % 1000000)) std::cout << i << std::endl;
- }
- auto r1 = table.lower_bound(nn);
- if (r1->first != nn)
- {
- do
- {
- auto r2 = table.find(r1->first - nn);
- if (r2 != table.end())
- {
- //std::cout << r1->first << " " << r1->second << std::endl;
- //std::cout << r2->first << " " << r2->second << std::endl;
- tmp = r1->second;
- for (unsigned long index = 0; index < n; index++)
- {
- if (tmp % 2)
- result.push_back(snum[index]);
- tmp >>= 1;
- }
- tmp = r2->second;
- for (unsigned long index = 0; index < n; index++)
- {
- if (tmp % 2)
- result.push_back(snum[index]);
- tmp >>= 1;
- }
- #ifndef _DEBUG
- sort(begin(result), end(result));
- #endif
- break;
- }
- r1 = ++r1;
- } while (r1 != table.end());
- }
- else
- {
- result.push_back(nn);
- }
- std::copy(begin(result), end(result), std::ostream_iterator<unsigned long>(std::cout," "));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement