結果
問題 | No.2086 A+B問題 |
ユーザー |
|
提出日時 | 2022-09-30 21:38:26 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 5,361 bytes |
コンパイル時間 | 1,990 ms |
コンパイル使用メモリ | 145,920 KB |
最終ジャッジ日時 | 2025-02-07 19:14:03 |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 21 |
ソースコード
#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/viewstruct 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;}