Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2014
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.04 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <cassert>
  5. #include <ctime>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <string>
  9. #include <vector>
  10. #include <deque>
  11. #include <queue>
  12. #include <list>
  13. #include <set>
  14. #include <map>
  15. //#include <iostream>
  16.  
  17. #define pb push_back
  18. #define mp make_pair
  19. #define TASKNAME "ideal"
  20.  
  21. #ifdef LOCAL
  22. #define eprintf(...) fprintf(stderr,__VA_ARGS__)
  23. #else
  24. #define eprintf(...)
  25. #endif
  26.  
  27. #define TIMESTAMP(x) eprintf("[" #x "] Time = %.3lfs\n",clock()*1.0/CLOCKS_PER_SEC)
  28.  
  29. #ifdef linux
  30. #define LLD "%lld"
  31. #else
  32. #define LLD "%I64d"
  33. #endif
  34.  
  35. #define sz(x) ((int)(x).size())
  36.  
  37. using namespace std;
  38.  
  39. typedef long double ld;
  40. typedef long long ll;
  41. typedef vector<ll> vll;
  42. typedef vector<int> vi;
  43. typedef vector<vi> vvi;
  44. typedef vector<bool> vb;
  45. typedef vector<vb> vvb;
  46. typedef pair<int, int> pii;
  47. typedef pair <ll, ll> pll;
  48. typedef vector<pii> vpii;
  49.  
  50. const int inf = 1e9;
  51. const double eps = 1e-9;
  52. const int INF = inf;
  53. const double EPS = eps;
  54.  
  55. #ifdef LOCAL
  56. struct __timestamper {
  57.     ~__timestamper(){
  58.         TIMESTAMP(end);
  59.     }
  60. } __Timestamper;
  61. #else
  62. struct __timestamper {};
  63. #endif
  64.  
  65. /*Template end*/
  66.  
  67. vector< vector<int> > ans;
  68. vector<int> cur;
  69. int n;
  70.  
  71. void go(int sum){
  72.   if (!ans.empty() && ans[0].size() < cur.size()) return;
  73.   if (sum == n){
  74.     if (!ans.empty() && ans[0].size() > cur.size()) ans.clear();
  75.     ans.pb(cur);
  76.     return;
  77.   }
  78.   if (sum + 2 * sum + 1 <= n) {
  79.     cur.pb(2*sum + 1);
  80.     go(sum + 2*sum + 1);
  81.     cur.pop_back();
  82.   }
  83.   if (sum + cur.back() <= n){
  84.     cur.pb(cur.back());
  85.     go(sum + cur.back());
  86.     cur.pop_back();
  87.   }
  88. }
  89.  
  90. int main()
  91. {
  92.   #ifdef LOCAL
  93.   freopen(TASKNAME".in","r",stdin);
  94.   freopen(TASKNAME".out","w",stdout);
  95.   #endif
  96.  
  97.   scanf("%d\n", &n);
  98.   cur.pb(1);
  99.   go(1);
  100.  
  101.   assert(!ans.empty());
  102.   sort(ans.begin(), ans.end());
  103.  
  104.   printf("%d %d\n", ans.size(), ans[0].size());
  105.   for (int i = 0; i < (int)ans.size(); i++){
  106.     for (auto x : ans[i])
  107.       printf("%d ", x);
  108.     printf("\n");
  109.   }
  110.  
  111.   return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement