# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
93796 | Noam527 | Odd-even (IZhO11_oddeven) | C++17 | 3 ms | 504 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define CHECK cout << "ok" << endl
#define finish(x) return cout << x << endl, 0
typedef long long ll;
typedef long double ldb;
const int md = 1e9 + 7, inf = 1e9 + 7;
using namespace std;
void debug(string names) {
cout << '\n';
}
template<typename A1, typename... A2>
void debug(string names, A1 par, A2... left) {
int pos = 0;
for (; pos < names.size() && names[pos] != ' ' && names[pos] != ','; pos++)
cout << names[pos];
cout << ": " << par << " ";
while (pos < names.size() && (names[pos] == ' ' || names[pos] == ',')) {
pos++;
}
names.erase(names.begin(), names.begin() + pos);
debug(names, left...);
}
struct bigint {
const int lim = 10000, g = 4;
vector<int> a;
bigint() {
a.clear();
}
bigint(string s) {
a.clear();
reverse(s.begin(), s.end());
for (int i = 0; i < s.size(); i += g) {
a.push_back(0);
for (int j = min((int)s.size() - 1, i + g - 1); j >= i; j--) {
a.back() = 10 * a.back() + (s[j] - '0');
}
}
}
bigint(int val) {
a.clear();
while (val) {
a.push_back(val % lim);
val /= lim;
}
}
bigint(vector<int> &b) {
a = b;
}
bigint(vector<ll> &b) {
a.clear();
a.resize(b.size());
for (int i = 0; i < b.size(); i++) a[i] = b[i];
}
void clear(vector<ll> &b) const {
ll rem = 0;
for (auto &i : b) {
i += rem;
rem = i / lim;
i %= lim;
}
while (rem) {
b.push_back(rem % lim);
rem /= lim;
}
}
void clear(vector<int> &b) const {
int rem = 0;
for (auto &i : b) {
i += rem;
rem = i / lim;
i %= lim;
}
while (rem) {
b.push_back(rem % lim);
rem /= lim;
}
}
void clear() {
clear(this->a);
}
bigint operator + (const bigint &x) const {
vector<int> b;
for (int i = 0; i < x.a.size() || i < a.size(); i++) {
b.push_back(0);
if (i < x.a.size()) b[i] += x.a[i];
if (i < a.size()) b[i] += a[i];
}
clear(b);
return bigint(b);
}
bigint operator + (int val) const {
bigint b(val);
return *this + b;
}
bigint operator - (const bigint &x) const {
bigint b = *this;
int sub = 0;
for (int i = 0; i < b.a.size(); i++) {
b.a[i] -= sub; sub = 0;
if (i < x.a.size()) b.a[i] -= x.a[i];
if (b.a[i] < 0) {
b.a[i] += lim;
sub = 1;
}
}
while (b.a.size() && b.a.back() == 0) b.a.pop_back();
return b;
}
bigint operator - (int val) const {
bigint b(val);
return *this - b;
}
bigint operator * (const bigint &x) const {
vector<ll> b((int)this->a.size() + (int)x.a.size() - 1);
for (int i = 0; i < a.size(); i++) for (int j = 0; j < x.a.size(); j++)
b[i + j] += a[i] * x.a[j];
clear(b);
return bigint(b);
}
bigint operator * (int val) const {
bigint b(val);
return *this * b;
}
bigint operator / (int val) const {
bigint b = *this;
ll add = 0;
for (int i = (int)b.a.size() - 1; i >= 0; i--) {
b.a[i] += add * lim;
add = b.a[i] % val;
b.a[i] /= val;
}
while (b.a.size() && b.a.back() == 0) b.a.pop_back();
clear(b.a);
return b;
}
void operator = (bigint x) {
a = x.a;
}
bool operator < (const bigint &x) const {
if (a.size() != x.a.size()) return a.size() < x.a.size();
for (int i = (int)a.size() - 1; i >= 0; i--) {
if (a[i] != x.a[i]) return a[i] < x.a[i];
}
return false;
}
void print() {
if (a.size() == 0) return;
cout << a.back();
int tmp;
for (int i = (int)a.size() - 2; i >= 0; i--) {
tmp = lim / 10;
while (tmp) {
cout << (a[i] / tmp) % 10;
tmp /= 10;
}
}
}
};
string s;
int main() {
ios::sync_with_stdio(0), cin.tie(0);
cin >> s;
bigint n(s);
n = n * 2;
bigint lo("0"), hi = n, mid, tmp;
while (lo < hi) {
mid = (lo + hi + 1) / 2;
tmp = mid + 1;
if (mid * tmp < n) lo = mid;
else hi = mid - 1;
}
bigint ans = n - lo - 1;
ans.print();
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |