結果
問題 |
No.81 すべて足すだけの簡単なお仕事です。
|
ユーザー |
![]() |
提出日時 | 2020-04-06 16:33:57 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 5,000 ms |
コード長 | 2,377 bytes |
コンパイル時間 | 1,923 ms |
コンパイル使用メモリ | 174,752 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-22 16:49:11 |
合計ジャッジ時間 | 2,864 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 30 |
ソースコード
#include <bits/stdc++.h> using namespace std; void f(string &s){ int now=0; while(now<s.size()&&s[now]!='.')now++; if(now==s.size()){ s.push_back('.'); for(int i=0;i<10;i++)s.push_back('0'); } else{ int A=s.size(); for(int i=0;i<10-(A-now)+1;i++)s.push_back('0'); } } string ans="0.0000000000"; void h(string a,string b,int mi){ string res;int pre=0; if(!mi)swap(a,b); for(int i=0;i<10;i++){ char A=a[a.size()-1-i],B=b[b.size()-1-i]; if(pre)A-=1;pre=0; if(A<B){A+=10;pre=1;} res.push_back(A-B+'0'); } res.push_back('.'); for(int i=11;i<b.size();i++){ char A=a[a.size()-1-i],B=b[b.size()-1-i]; if(pre)A-=1;pre=0; if(A<B){A+=10;pre=1;} res.push_back(A-B+'0'); } for(int i=b.size();i<a.size();i++){ char A=a[a.size()-1-i]; if(pre)A-=1;pre=0; if(A<'0')A+=10,pre=1; res.push_back(A); } if(res.back()=='0'&&res.size()>12)res.pop_back(); if(mi)res.push_back('-'); reverse(res.begin(),res.end()); ans=res; } void g(string a,string b){ int mi=0; if(a[0]=='-'&&b[0]=='-'){ mi=1; a=a.substr(1,a.size()-1); b=b.substr(1,b.size()-1); } else if(a[0]=='-'){ a=a.substr(1,a.size()-1); if(a.size()>b.size())mi=1; else if(a.size()==b.size()){ for(int i=0;i<a.size();i++){ if(a[i]>b[i])mi=1; if(a[i]<b[i])break; } } h(a,b,mi);return; } else if(b[0]=='-'){ swap(a,b); a=a.substr(1,a.size()-1); if(a.size()>b.size())mi=1; else if(a.size()==b.size()){ for(int i=0;i<a.size();i++){ if(a[i]>b[i])mi=1; if(a[i]<b[i])break; } } h(a,b,mi);return; } if(a.size()<b.size())swap(a,b); string res; int pre=0; for(int i=0;i<b.size();i++){ if(i==10){res.push_back('.');continue;} char A=a[a.size()-1-i],B=b[b.size()-1-i]; char C=(char)(A-'0'+B-'0'+pre); pre=0; if(C>9)C-=10,pre=1; res.push_back((char)(C+'0')); } for(int i=b.size();i<a.size();i++){ char A=a[a.size()-1-i]; char C=(char)(A-'0'+pre); pre=0; if(C>9)C-=10,pre=1; res.push_back((char)(C+'0')); } if(pre)res.push_back('1'); if(mi)res.push_back('-'); reverse(res.begin(),res.end()); ans=res; } signed main(){ int n;cin>>n; vector<string> s(n); for(int i=0;i<n;i++)cin>>s[i]; for(string &p:s)f(p); for(string &p:s)g(ans,p); cout<<ans<<endl; }