Advertisement
Guest User

arthur mdamdamda

a guest
Oct 1st, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.90 KB | None | 0 0
  1. bool compares(string &a, string &b) {
  2.     return a.size() < b.size() || (a.size() == b.size() && a < b);
  3. }
  4.  
  5. string callMom(string &a, string &b) {
  6.     int n = a.size();
  7.     int m = b.size();
  8.     assert(n <= 20);
  9.     string ans = "";
  10.     for (int mask = 1; mask < (1<<n); mask++) {
  11.         if (__builtin_popcount(mask) > m) continue;
  12.         string cur = "";
  13.         for (int i = 0; i < n; i++) if (mask & (1<<i)) cur += a[i];
  14.         if (compares(ans, cur)) ans = cur;
  15.     }
  16.     return ans;
  17. }
  18.  
  19. int brute(vector<string> v) {
  20.     if (v.size() == 0) return 0;
  21.     string l = v.back();
  22.     int ans = 0;
  23.     for (int i = v.size() - 2; i >= 0; i--) {
  24.         string nw = callMom(v[i], l);
  25.         if (nw == "") return -1;
  26.         ans += v[i].size() - nw.size();
  27.         l = nw;
  28.     }
  29.     return ans;
  30. }
  31.  
  32. unsigned int rnd() {
  33.     unsigned int r = rand();
  34.     r <<= 16;
  35.     r |= rand();
  36.     return r;
  37. }
  38.  
  39. int rnd(int l, int r) {
  40.     return l + (rnd % (r - l + 1));
  41. }
  42.  
  43. string gens(int n) {
  44.     string s;
  45.     for (int i = 0; i < n; i++) {
  46.         s.pb(rnd('0', '9'));
  47.     }
  48.     return s;
  49. }
  50.  
  51. string tos(long long x) {
  52.     string s;
  53.     while (x > 0) {
  54.         s.pb(x % 10);
  55.         x /= 10;
  56.     }
  57.     reverse(s.begin(), s.end());
  58.     return s;
  59. }
  60.  
  61. string fix(string s) {
  62.     if (rnd(100) < 20) return s;
  63.     string f = "";
  64.     f +=  rnd('0', '9');
  65.     s.insert(rnd(0, s.size() - 1), f);
  66.     return s;
  67. }
  68.  
  69. vector<string> gen(int n) {
  70.     vector<string> res;
  71.     if (rnd(0, 1)) {
  72.         for (int i = 0; i < n; i++) {
  73.             res.pb(gens(min(n, 15)));
  74.         }
  75.     } else {
  76.         long long cur = 1;
  77.         for (int i = 0; i < n; i++) {
  78.             cur += rnd(120, 344);
  79.             res.pb(tos(cur));
  80.         }
  81.         if (rnd(0, 1)) {
  82.             for (int i = 0; i < n; i++) {
  83.                 res[i]  = fix(fix(res[i]));
  84.             }
  85.         }
  86.     }
  87.     return res;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement