// #define saisumith770 #pragma GCC optimize("O3,unroll-loops") #include #include #include using namespace std; using namespace chrono; using namespace __gnu_pbds; // clang-format off template ostream &operator<<(ostream &os, const pair &p) { return os << '[' << p.first << ',' << p.second << ']'; } template ::value, typename T_container::value_type>::type> ostream &operator<<(ostream &os, const T_container &v){string sep;for (const T &x : v){os << sep << x, sep = ' ';}return os;} #define PI 3.141592653589793238462 #define ll long long #define ull unsigned long long #define ld long double #define all(a) (a).begin(), (a).end() #define pb push_back #define pf push_front #define ppb pop_back #define ppf pop_front #define nline '\n' mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); bool is_prime(ll a){for (ll i = 2; i <= sqrt(a); i++){if (a % i == 0)return false;} return true;} ll gcd(ll a, ll b){if (b == 0){return a;}if (b > a){return gcd(b, a);}return gcd(b, a % b);} void extendgcd(ll a, ll b, ll *v){if (b == 0){v[0] = 1;v[1] = 10;v[2] = a;return;}extendgcd(b, a % b, v);ll x = v[1];v[1] = v[0] - v[1] * (a / b);v[0] = x;return;} // pass an arry of size1 3 //-------------Modular Arithemetics---------------------- ll mod_add(ll a, ll b, ll m){a = a % m;b = b % m;return (((a + b) % m) + m) % m;} ll mod_sub(ll a, ll b, ll m){a = a % m;b = b % m;return (((a - b) % m) + m) % m;} ll mod_pow(ll a, ll b, ll mod){ll res = 1;while (b > 0){if (b & 1)res = (res * a) % mod;a = (a * a) % mod;b = b >> 1;}return res;} ll mod_invprime(ll a, ll b) { return mod_pow(a, b - 2, b); } ll mod_invnonprime(ll a, ll b){ll arr[3];extendgcd(a, b, arr);return mod_add(arr[0], 0, b);} ll mod_inv(ll a, ll b){if (is_prime(b))return mod_invprime(a, b);return mod_invnonprime(a, b);} ll mod_mul(ll a, ll b, ll m){a = a % m;b = b % m;return (((a * b) % m) + m) % m;} ll mod_div(ll a, ll b, ll m){a = a % m;b = b % m;return (mod_mul(a, mod_inv(b, m), m) + m) % m;} ll getRandomNumber(ll l, ll r) {return uniform_int_distribution(l, r)(rng);} //-------------------------------------------------------- vector sieve(ll n){vector vect(n + 1, 1);for (ll i = 2; i <= n; i++)if (vect[i]){for (ll j = i * i; j <= n; j += i)vect[j] = 0;}return vect;} ll ncr(ll n, ll r){if (r > n) return 0; if (r == 0 || n == r) return 1; double res = 0; for (ll i = 0; i < r; i++) res += log(n - i) - log(i + 1); return (ll)round(exp(res));} // clang-format on bool stop(vector p){ for(auto i=2;i p){ for(auto i=p.size()-1;i>=0;i--){ if(p[i]) { return i; } } return -1; } void solve() { int a,b; cin>>a>>b; vector p(b+1,0); p[b] = a; while(!stop(p)){ int hi = highestP(p); if(hi >= 2){ int buf = p[hi]; p[hi]-=buf; p[hi-1]-=buf; p[hi-2]-=buf; } } cout<(stop1 - start1); #ifdef saisumith770 cerr << "Time: " << duration.count() / 1000 << endl; #endif }