Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool compares(string &a, string &b) {
- return a.size() < b.size() || (a.size() == b.size() && a < b);
- }
- string callMom(string &a, string &b) {
- int n = a.size();
- int m = b.size();
- assert(n <= 20);
- string ans = "";
- for (int mask = 1; mask < (1<<n); mask++) {
- if (__builtin_popcount(mask) > m) continue;
- string cur = "";
- for (int i = 0; i < n; i++) if (mask & (1<<i)) cur += a[i];
- if (compares(ans, cur)) ans = cur;
- }
- return ans;
- }
- int brute(vector<string> v) {
- if (v.size() == 0) return 0;
- string l = v.back();
- int ans = 0;
- for (int i = v.size() - 2; i >= 0; i--) {
- string nw = callMom(v[i], l);
- if (nw == "") return -1;
- ans += v[i].size() - nw.size();
- l = nw;
- }
- return ans;
- }
- unsigned int rnd() {
- unsigned int r = rand();
- r <<= 16;
- r |= rand();
- return r;
- }
- int rnd(int l, int r) {
- return l + (rnd % (r - l + 1));
- }
- string gens(int n) {
- string s;
- for (int i = 0; i < n; i++) {
- s.pb(rnd('0', '9'));
- }
- return s;
- }
- string tos(long long x) {
- string s;
- while (x > 0) {
- s.pb(x % 10);
- x /= 10;
- }
- reverse(s.begin(), s.end());
- return s;
- }
- string fix(string s) {
- if (rnd(100) < 20) return s;
- string f = "";
- f += rnd('0', '9');
- s.insert(rnd(0, s.size() - 1), f);
- return s;
- }
- vector<string> gen(int n) {
- vector<string> res;
- if (rnd(0, 1)) {
- for (int i = 0; i < n; i++) {
- res.pb(gens(min(n, 15)));
- }
- } else {
- long long cur = 1;
- for (int i = 0; i < n; i++) {
- cur += rnd(120, 344);
- res.pb(tos(cur));
- }
- if (rnd(0, 1)) {
- for (int i = 0; i < n; i++) {
- res[i] = fix(fix(res[i]));
- }
- }
- }
- return res;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement