Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //---H---
- #include "bits/stdc++.h"
- //#include <windows.h>
- //speed coding
- #define mp make_pair
- #define cve(tpy) for (auto i : tpy) {for(auto j : i){cout << j << " "; }cout << "\n";} ;
- #define f first
- #define s second
- #define loop(i, x, n) for (ll i = x; i < n; i++)
- #define joop(x, n) for (ll j = x; j < n; j++)
- #define lp(n) for (ll i = 0; i < n; i++)
- #define err cout << "ERROR" << endl;
- #define all(x) x.begin(), x.end()
- #define pb push_back
- #define sz(x) x.size()
- #define rndm rng()
- // types
- #define pii pair<int, int>
- #define pll pair<ll, ll>
- #define vvi vector<vector<int>>
- #define vvll vector<vector<ll>>
- typedef long long ll;
- typedef long double ld;
- // types of data
- #define inf 1000000000
- #define infll 1000000000000000000
- #define INF ll(1e18)
- //#define md 998244353
- #define mod 1000000009
- #define K 239017
- //#define DEBUG 1
- using namespace std;
- mt19937_64 rng(228228);
- uniform_int_distribution<ll> drist;
- int n, m, k;
- string s;
- int check(string &cp, int a, int b){
- int cnt = 0;
- cnt -= s[a] == cp[a];
- cnt -= s[b] == cp[b];
- cnt += s[a] == cp[b];
- cnt += s[b] == cp[a];
- if(s[a] == cp[a]){
- }
- return cnt;
- }
- ld p(ld dx, ld t){
- return exp(dx/t);
- }
- void solve() {
- cin >> s;
- n = sz(s);
- string cp = s;
- int ans = n;
- ld t = 1;
- ld mt = 0.99999;
- while(ans && clock()/1.0*(CLOCKS_PER_SEC) < 5){
- int a = rand() % n;
- int b = rand() % n;
- ld dx = check(cp, a, b);
- if(dx < 0 or p(dx, t) > (ld)(rand()%infll)/infll){
- swap(cp[a], cp[b]);
- ans+= (int)dx;
- }
- t*=mt;
- }
- cout << s << "\n" << cp;
- }
- int main() {
- // setlocale(LC_ALL, "Russian");
- // SetConsoleOutputCP(1251);
- ios::sync_with_stdio(0);
- cin.tie(0);
- #ifdef DEBUG
- freopen("text.txt", "r", stdin);
- #else
- #endif
- // ll ggwp;
- // cin >> ggwp;
- // loop(xuy, 0, ggwp){
- // solve();
- // }
- solve();
- return 0;
- }
Add Comment
Please, Sign In to add comment