結果
問題 | No.373 かけ算と割った余り |
ユーザー |
![]() |
提出日時 | 2016-06-04 22:51:39 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 3,321 bytes |
コンパイル時間 | 1,859 ms |
コンパイル使用メモリ | 113,336 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-09 05:00:55 |
合計ジャッジ時間 | 2,082 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 5 |
ソースコード
#include <algorithm>#include <cstdio>#include <cstdlib>#include <cctype>#include <cmath>#include <iostream>#include <queue>#include <list>#include <stack>#include <map>#include <numeric>#include <set>#include <sstream>#include <string>#include <vector>using namespace std;#define REP(i,a,n) for(int i=(a); i<(int)(n); i++)#define rep(i,n) REP(i,0,n)#define FOR(it,c) for(__typeof((c).begin()) it=(c).begin(); it!=(c).end(); ++it)#define ALLOF(c) (c).begin(), (c).end()typedef long long ll;typedef unsigned long long ull;class Bignum{public:Bignum(){}Bignum(string s){for(int i=0;i<s.length();i++) d.push_front(s[i]-'0');normalize();}Bignum &normalize(){for(int i=d.size()-1;i>=0;i--){ if(d[i]!=0) break; d.pop_back(); }return *this;}int operator[](int i){ return i>=d.size()?0:d[i]; }int size(){ return normalize(),d.size(); }void toZero(){ d.clear(); d.push_front(0); }void toOne(){ d.clear(); d.push_front(1); }Bignum &inc(){ Bignum one("1"); return operator+=(one); }Bignum &operator+=(Bignum n){int l=max(size(),n.size());d.resize(l+1,0);for(int c=0,i=0;i<=l;i++) d[i]=(c=d[i]+n[i]+c/10)%10;return normalize();}Bignum &operator-=(Bignum n){//assert(size()>=n.size());for(int c=0,i=0;i<d.size();i++) d[i]=((c=d[i]-n[i]+(c-9)/10)+10)%10;return normalize();}Bignum &operator*=(int n){for(int i=0;i<15;i++) d.push_back(0);for(int c=0,i=0;i<d.size();i++) d[i]=(c=d[i]*n+c/10)%10;return normalize();}Bignum &operator*=(ull n){for(int i=0;i<25;i++) d.push_back(0);for(ull c=0,i=0;i<d.size();i++) d[i]=(c=d[i]*n+c/10ULL)%10ULL;return normalize();}Bignum operator+(Bignum n){ return Bignum(*this)+=n; }Bignum operator-(Bignum n){ return Bignum(*this)-=n; }Bignum operator*(int n){ return Bignum(*this)*=n; }Bignum operator*(ull n){ return Bignum(*this)*=n; }Bignum operator*(Bignum n){Bignum ret;int ka=size(),kb=n.size();ret.d.resize(ka+kb,0);for(int i=0;i<ka;i++) for(int c=0,j=0;j<=kb;j++) ret.d[i+j]=(c=ret.d[i+j]+d[i]*n[j]+c/10)%10;return ret.normalize();}Bignum &operator*=(Bignum n){ return (*this)=(*this)*n; }int div(int n){int c=0;for(int i=size()-1;i>=0;i--) d[i]=(c=c%n*10+d[i])/n;return c%n;}Bignum &operator<<=(int n){for(int i=0;i<n;i++) d.push_front(0);return normalize();}Bignum operator<<(int n){ return Bignum(*this)<<=n; }bool operator>(Bignum n){if(size()!=n.size()) return size()>n.size();for(int i=size()-1;i>=0;i--) if(d[i]!=n[i]) return d[i]>n[i];return false;}deque<int> d;};pair<Bignum,Bignum> ldiv(Bignum a, Bignum b){Bignum ret;for(int i=a.size()-1;i>=0;i--){int n;for(n=1;n<10;n++) if(((b*n)<<i)>a) break;a-=(b*(n-1))<<i;ret.d.push_front(n-1);}return make_pair(ret.normalize(),a.normalize());}ostream &operator<<(ostream &os, const Bignum &l){Bignum n=l;if (n.size()==0) os<<0;else for (int i=n.d.size()-1;i>=0;i--) os<<n.d[i];return os;}int main(){ios::sync_with_stdio(false);string A, B, C, D;cin >> A >> B >> C >> D;Bignum a(A), b(B), c(C), d(D);a *= b;a *= c;pair<Bignum,Bignum> ret = ldiv(a, d);cout << ret.second << endl;return 0;}