結果
| 問題 |
No.81 すべて足すだけの簡単なお仕事です。
|
| コンテスト | |
| ユーザー |
cureskol
|
| 提出日時 | 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;
}
cureskol