Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define f first
  3. #define s second
  4. #define mp make_pair
  5. #define pb push_back
  6. #define lp(i,a,n) for(int i=(a);i<=(int)(n);++i)
  7. #define lpd(i,a,n) for(int i=(a);i>=(int)(n);--i)
  8. #define clr(a,b) memset(a,b,sizeof a)
  9. #define all(v) v.begin(),v.end()
  10. #define println(a) cout <<(a) <<endl
  11. #define sz(x) ((int)(x).size())
  12. #define readi(x) scanf("%d",&x)
  13. #define read2i(x,y) scanf("%d%d",&x,&y)
  14. #define read3i(x,y,z) scanf("%d%d%d",&x,&y,&z)
  15. #define readll(x) scanf("%I64d",&x)
  16. #define mod 1000000007
  17. #define eps 1e-6
  18. #define infi 1000000000
  19. #define infll 1000000000000000000ll
  20. using namespace std;
  21. typedef long long ll;
  22. typedef unsigned long long ull;
  23. typedef pair<int, int> pii;
  24. typedef pair<ll, ll> pll;
  25. typedef vector<int> vi;
  26. typedef vector<vi> vvi;
  27. typedef vector<ll> vll;
  28. typedef set<int> si;
  29. typedef map<int,int> mii;
  30.  
  31. const int N = 20;
  32. ull n,dp[10][1<<20][15],tenPow[22];
  33. bool vis[10][1<<20][15],vis1[10][1<<20][15];
  34. int f[] = {0,1,2,3,5,8,13};
  35.  
  36.  
  37. ull solve(int i,int mask,int d) {
  38. if(mask == (1<<N)-1) return !d && i;
  39. if(i > 9) return 0;
  40. ull &ret = dp[i][mask][d];
  41. if(vis[i][mask][d]) return ret;
  42. vis[i][mask][d] = true;
  43.  
  44. if(!d)
  45. lp(j,0,6) ret += solve(i+1,mask,f[j]);
  46. else {
  47. int first = 0;
  48. if(!i)
  49. while(first < N && (mask&(1<<first))) ++first;
  50. lp(j,0,N-1) if(!(mask&(1<<j)) && (i || j != first))
  51. ret += solve(i,mask | (1<<j),d-1);
  52. }
  53.  
  54. return ret;
  55. }
  56.  
  57. ull ans;
  58. bool done;
  59. void getAns(int i,int mask,int d,ull n,ull x) {
  60. if(mask == (1<<N)-1) {
  61. if(!n) ans = x , done = true;
  62. return;
  63. }
  64.  
  65. if(done || vis1[i][mask][d] || i > 9) return;
  66. vis1[i][mask][d] = true;
  67.  
  68. if(!d)
  69. lp(j,0,6) getAns(i+1,mask,f[j],n,x);
  70. else {
  71.  
  72. int first = 0;
  73. while(first < N && (mask&(1<<first))) ++first;
  74.  
  75. lp(j,0,N-1) if(!(mask&(1<<j)) && (i || j != first)) {
  76. getAns(i,mask|(1<<j),d-1,n,x+tenPow[j-first]*i);
  77. n -= solve(i,mask | (1<<j),d-1);
  78. if(n <= 0 || done) return;
  79. }
  80. }
  81.  
  82.  
  83. }
  84.  
  85.  
  86.  
  87.  
  88. int main(){
  89.  
  90. int rep[10] = {0};
  91. lp(i,1,282475249) {
  92. int temp = i , sum = 0;
  93. lp(j,0,9) rep[i] = f[temp%7] , sum += rep[i], temp /= 7;
  94. if(sum < 20)
  95. lp(j,0,9) printf("%d %d\n",i,rep[i]);
  96.  
  97. clr(rep,0);
  98. }
  99.  
  100. return 0;
  101. }
  102.  
  103. /*
  104. freopen("input.txt","r",stdin);
  105. freopen("output.txt","w",stdout);
  106. ios::sync_with_stdio(0);cin.tie(0);
  107. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement