結果
問題 | No.2086 A+B問題 |
ユーザー | KKT89 |
提出日時 | 2022-09-30 21:38:26 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 5,361 bytes |
コンパイル時間 | 2,093 ms |
コンパイル使用メモリ | 144,772 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-06-02 05:10:43 |
合計ジャッジ時間 | 2,791 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,812 KB |
testcase_01 | AC | 2 ms
6,944 KB |
testcase_02 | AC | 2 ms
6,940 KB |
testcase_03 | AC | 2 ms
6,940 KB |
testcase_04 | AC | 1 ms
6,940 KB |
testcase_05 | AC | 2 ms
6,940 KB |
testcase_06 | AC | 1 ms
6,944 KB |
testcase_07 | AC | 2 ms
6,940 KB |
testcase_08 | AC | 2 ms
6,940 KB |
testcase_09 | AC | 1 ms
6,944 KB |
testcase_10 | AC | 2 ms
6,944 KB |
testcase_11 | AC | 1 ms
6,944 KB |
testcase_12 | AC | 2 ms
6,940 KB |
testcase_13 | AC | 2 ms
6,944 KB |
testcase_14 | AC | 2 ms
6,944 KB |
testcase_15 | AC | 1 ms
6,944 KB |
testcase_16 | AC | 2 ms
6,940 KB |
testcase_17 | AC | 1 ms
6,940 KB |
testcase_18 | AC | 2 ms
6,940 KB |
testcase_19 | AC | 1 ms
6,940 KB |
testcase_20 | AC | 1 ms
6,940 KB |
ソースコード
#pragma GCC optimize("Ofast") #include <iostream> #include <vector> #include <algorithm> #include <map> #include <queue> #include <cstdio> #include <ctime> #include <assert.h> #include <chrono> #include <random> #include <numeric> #include <set> #include <deque> #include <stack> #include <sstream> #include <utility> #include <cstring> #include <unordered_map> #include <unordered_set> #include <tuple> #include <array> #include <bitset> using namespace std; typedef long long int ll; typedef unsigned long long ull; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); ll myRand(ll B) { return (ull)rng() % B; } inline double time() { return static_cast<long double>(chrono::duration_cast<chrono::nanoseconds>(chrono::steady_clock::now().time_since_epoch()).count()) * 1e-9; } // 参考: // https://awakia-n.hatenablog.com/entry/20100515/1273922367 // 今後参考にしたい: // https://drive.google.com/file/d/15_gwYirAxwjbTMEq5MXaPEZAlzkbZfia/view struct BigInt{ vector<int> d; bool minus = false; BigInt& normalize(){ int i = (int)d.size() - 1; while(i>=0 and d[i] == 0)--i; d.resize(i+1); if((int)d.size() == 0) { d.emplace_back(0); minus = false; } return *this; } int size(){ return d.size(); } BigInt(ll _x = 0){ if(_x < 0){ minus = true; _x = -_x; } while(_x){ d.emplace_back(_x%10); _x /= 10; } if(d.size() == 0){ d.emplace_back(0); } } BigInt(string _x){ for(char &c:_x){ if(c == '-'){ minus = true; } else{ d.emplace_back(c-'0'); } } reverse(d.begin(), d.end()); normalize(); } BigInt& operator = (const BigInt& x); BigInt& operator = (const ll& x); BigInt& operator = (const string& x); const bool operator < (const BigInt& x) const; const bool operator > (const BigInt& x) const; const bool operator <= (const BigInt& x) const; const bool operator >= (const BigInt& x) const; const bool operator != (const BigInt& x) const; const bool operator == (const BigInt& x) const; BigInt operator -() const; BigInt& operator += (const BigInt& x); BigInt& operator -= (const BigInt& x); const BigInt operator + (const BigInt& x) const; const BigInt operator - (const BigInt& x) const; friend istream& operator >> (istream& is, BigInt& x); friend ostream& operator << (ostream& os, const BigInt& x); friend const BigInt abs(BigInt x); }; BigInt& BigInt::operator = (const BigInt& x){ minus = x.minus; d = x.d; return *this; } BigInt& BigInt::operator = (const ll& x){ return *this = BigInt(x); } BigInt& BigInt::operator = (const string& x){ return *this = BigInt(x); } const bool BigInt::operator < (const BigInt& x) const{ if(minus != x.minus) return (minus ? true : false); if(d.size() != x.d.size()) return (d.size() < x.d.size()) ^ minus; for (int i = (int)d.size()-1; i >= 0; --i){ if(d[i] != x.d[i]) return (d[i] < x.d[i]) ^ minus; } return false; } const bool BigInt::operator > (const BigInt& x) const{return x<(*this);} const bool BigInt::operator <= (const BigInt& x) const{return !(x<(*this));} const bool BigInt::operator >= (const BigInt& x) const{return !(x>(*this));} const bool BigInt::operator != (const BigInt& x) const{return (*this)<x || x<(*this);} const bool BigInt::operator == (const BigInt& x) const{return !((*this)<x || x<(*this));} BigInt BigInt::operator -() const{ BigInt res(*this); res.minus = !res.minus; return res; } BigInt& BigInt::operator += (const BigInt& x){ if(minus != x.minus) return *this -= -x; if(d.size() < x.d.size()) d.resize(x.d.size()); int tmp = 0; for (int i = 0; i < (int)d.size(); ++i) { d[i] += (i < (int)x.d.size() ? x.d[i] : 0) + tmp; if(d[i] >= 10){ tmp = 1; d[i] -= 10; } else tmp = 0; } if(tmp) d.emplace_back(1); return *this; } BigInt& BigInt::operator -= (const BigInt& x){ if(minus != x.minus) return *this += -x; vector<int> dd(x.d); if(((*this)<x) ^ minus){ swap(d,dd); minus = !minus; } int tmp = 0; for (int i = 0; i < (int)d.size(); ++i) { d[i] -= (i < (int)dd.size() ? dd[i] : 0) + tmp; if(d[i] < 0){ d[i] += 10; tmp = 1; } else{ tmp = 0; } } return this->normalize(); } const BigInt BigInt::operator + (const BigInt& x) const{ BigInt res(*this); return res += x; } const BigInt BigInt::operator - (const BigInt& x) const{ BigInt res(*this); return res -= x; } istream& operator >> (istream& is, BigInt& x){ string s; is >> s; x = BigInt(s); return is; } ostream& operator << (ostream& os, const BigInt& x){ if(x.minus) os << '-'; int N = x.d.size(); for (int i = N-1; i >= 0; --i){ os << x.d[i]; } return os; } const BigInt abs(BigInt x){ x.minus = false; return x; } int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); BigInt A,B; cin >> A >> B; A += B; cout << A << endl; }