Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- //#pragma gcc optimize("Ofast,unroll-loops")
- //#pragma gcc target("sse,sse2,sse3,ssse3,sse4,avx,avx2,fma,abm,mmx,popcnt,tune=native")
- //#define int long long
- //#define double long double
- #define MP make_pair
- #define F first
- #define S second
- #define MOD 43200000000000
- random_device rd;
- default_random_engine gen = default_random_engine(rd());
- uniform_int_distribution<int> r3(0, 2), r5050(0, 5049), r60(0, 59);
- long double gmx = 0;
- string gbst;
- long double score(string s, int E)
- {
- int W = 10, R = 0, P = 0, S = 0;
- long double ret = (long double)W / 3 + (long double)E / 3;
- for (int i = 1; i < 60; i++)
- {
- if (s[i - 1] == 'R')
- R++;
- else if (s[i - 1] == 'P')
- P++;
- else
- S++;
- long double pR = (long double)S / i, pP = (long double)R / i, pS = (long double)P / i;
- if (s[i] == 'R')
- ret += pR * E + pS * W;
- else if (s[i] == 'P')
- ret += pP * E + pR * W;
- else
- ret += pS * E + pP * W;
- }
- return ret;
- }
- void gen1st(int Ev)
- {
- long double sum = 0, mx = 0;
- string bst;
- freopen("tmp.txt", "w", stdout);
- for (int i = 0; i < 100; i++)
- {
- string s;
- for (int j = 0; j < 60; j++)
- s += "RPS"[r3(gen)];
- cout << s << ' ' << fixed << setprecision(20) << score(s, Ev) << '\n', sum += score(s, Ev);
- if (score(s, Ev) > mx)
- mx = score(s, Ev), bst = s;
- }
- cerr << "1st AVG: " << fixed << setprecision(20) << sum << '\n';
- cerr << "BEST: " << bst << ' ' << fixed << setprecision(20) << score(bst, Ev) << '\n';
- if (score(bst, Ev) > gmx)
- gmx = score(bst, Ev), gbst = bst;
- }
- bool cmp(pair<string, long double> a, pair<string, long double> b)
- {
- return a.S > b.S;
- }
- void gennext(int Ev, bool prt)
- {
- freopen("tmp.txt", "r", stdin);
- vector<pair<string, long double>> v(100);
- for (auto &p : v)
- cin >> p.F >> p.S;
- sort(v.begin(), v.end(), cmp);
- vector<int> ns;
- for (int i = 0; i < 100; i++)
- for (int j = 0; j < 100 - i; j++)
- ns.push_back(i);
- long long sum = 0, mx = 0;
- string bst;
- freopen("tmp.txt", "w", stdout);
- for (int i = 0; i < 100; i++)
- {
- int id = ns[r5050(gen)], pos = r60(gen);
- string ts = v[id].F;
- ts[pos] = "RPS"[r3(gen)];
- long double ns = score(ts, Ev);
- cout << ts << ' ' << ns << '\n', sum += ns;
- if (ns > mx)
- mx = ns, bst = ts;
- }
- if (prt)
- {
- cerr << "next AVG: " << fixed << setprecision(20) << sum << '\n';
- cerr << "BEST: " << bst << ' ' << fixed << setprecision(20) << score(bst, Ev) << '\n';
- }
- if (score(bst, Ev) > gmx)
- {
- gmx = score(bst, Ev), gbst = bst;
- cerr << "GLOBAL BEST: " << gbst << ' ' << fixed << setprecision(20) << gmx << '\n';
- }
- }
- signed main()
- {
- int E = 10;
- gen1st(E);
- for (int i = 0; i <= 100000; i++)
- gennext(E, false);
- //gennext(E, true);
- //cerr << "GLOBAL BEST: " << gbst << ' ' << fixed << setprecision(20) << score(gbst, E) << '\n';
- return 0;
- }
- // * * ***** * * * * **** **** **** ** **
- // * * * ** * * * * * * * * * * *
- // ***** ***** * * * * * * **** * * * *
- // * * * * ** * * * * * * ***** *
- // * * ***** * * *** **** * * **** * *****
- // ***** ***** * * * ***** * * ***** *****
- // * * * * * * * ** * * * *
- // * * * ***** * * * * * * *****
- // * * * * * * * * ** * *
- // **** ***** * ***** ***** * * * *
Advertisement
Add Comment
Please, Sign In to add comment