結果

問題 No.81 すべて足すだけの簡単なお仕事です。
ユーザー KKT89KKT89
提出日時 2020-07-15 11:02:32
言語 C++17
(gcc 13.2.0 + boost 1.83.0)
結果
WA  
(最新)
AC  
(最初)
実行時間 -
コード長 2,904 bytes
コンパイル時間 2,250 ms
コンパイル使用メモリ 120,836 KB
実行使用メモリ 4,388 KB
最終ジャッジ日時 2023-09-25 16:22:49
合計ジャッジ時間 2,529 ms
ジャッジサーバーID
(参考情報)
judge14 / judge13
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
4,376 KB
testcase_01 AC 1 ms
4,380 KB
testcase_02 AC 2 ms
4,380 KB
testcase_03 AC 1 ms
4,380 KB
testcase_04 AC 2 ms
4,376 KB
testcase_05 AC 1 ms
4,376 KB
testcase_06 AC 1 ms
4,380 KB
testcase_07 AC 2 ms
4,380 KB
testcase_08 AC 2 ms
4,376 KB
testcase_09 AC 2 ms
4,380 KB
testcase_10 WA -
testcase_11 AC 2 ms
4,376 KB
testcase_12 AC 2 ms
4,376 KB
testcase_13 AC 2 ms
4,380 KB
testcase_14 AC 2 ms
4,376 KB
testcase_15 AC 2 ms
4,380 KB
testcase_16 AC 2 ms
4,380 KB
testcase_17 AC 1 ms
4,380 KB
testcase_18 AC 2 ms
4,376 KB
testcase_19 AC 1 ms
4,384 KB
testcase_20 AC 2 ms
4,380 KB
testcase_21 AC 1 ms
4,376 KB
testcase_22 WA -
testcase_23 AC 1 ms
4,384 KB
testcase_24 AC 2 ms
4,380 KB
testcase_25 AC 2 ms
4,384 KB
testcase_26 AC 2 ms
4,376 KB
testcase_27 AC 2 ms
4,380 KB
testcase_28 AC 2 ms
4,380 KB
testcase_29 AC 2 ms
4,380 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#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>
using namespace std;
typedef long long int ll;
using ull = unsigned long long;

bool comp(string a,string b){
    if(a==b)return true;
    if(a.size()>b.size())return true;
    else if(b.size()>a.size())return false;
    else return a>b;
}

string add(string a,string b){
    int maxlen=max(a.size(),b.size())+1;
    vector<int> ret(maxlen,0);
    string ans="";
    reverse(a.begin(),a.end());
    reverse(b.begin(),b.end());
    for(int i=0;i<a.size();i++){
        ret[i]+=(a[i]-'0');
    }
    for(int i=0;i<b.size();i++){
        ret[i]+=(b[i]-'0');
    }
    for(int i=0;i<maxlen-1;i++){
        ans+=(ret[i]%10)+'0';
        ret[i+1]+=ret[i]/10;
    }
    if(ret[maxlen-1]){
        ans+=ret[maxlen-1]+'0';
    }
    reverse(ans.begin(),ans.end());
    return ans;
}

string sub(string a,string b){
    bool minus=0;
    if(!comp(a,b)){
        swap(a,b);
        minus=1;
    }
    int maxlen=max(a.size(),b.size());
    vector<int> ret(maxlen,0);
    string ans="";
    reverse(a.begin(),a.end());
    reverse(b.begin(),b.end());
    for(int i=0;i<a.size();i++){
        ret[i]=a[i]-'0';
    }
    for(int i=0;i<b.size();i++){
        ret[i]-=b[i]-'0';
    }
    for(int i=0;i<maxlen;i++){
        while(ret[i]<0){
            ret[i]+=10;
            ret[i+1]--;
        }
        ans+=(ret[i]+'0');
    }
    reverse(ans.begin(),ans.end());
    int cnt=0;
    while(ans[cnt]=='0'&&cnt!=ans.size()-1)cnt++;
    return (minus?"-":"")+ans.substr(cnt);
}

string mul_10(string s,int m){
    int n=s.size();
    int cnt=0;
    for(int i=n-1;i>=0;i--){
        if(s[i]=='.'){
            cnt=n-1-i;
            s=s.substr(0,i)+s.substr(i+1);
            break;
        }
    }
    for(int i=0;i<(10-cnt);i++){
        s+="0";
    }
    return s;
}

string div_10(string s,int m){
    bool minus=0;
    if(s[0]=='-'){
        minus=1;
        s=s.substr(1);
    }
    int n=s.size();
    string res="";
    for(int i=0;i<n;i++){
        if(i+10==n)res+=".";
        res+=s[i];
    }
    if(res[0]=='.'){
        res="0"+res;
    }
    if(minus)res="-"+res;
    return res;
}

int main(){
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    int n; cin >> n;
    string res="0";
    while(n--){
        string s; cin >> s;
        s=mul_10(s,10);
        if(res[0]=='-'){
            if(s[0]=='-'){
                res="-"+add(res.substr(1),s.substr(1));
            }
            else{
                res=sub(s,res.substr(1));
            }
        }
        else{
            if(s[0]=='-'){
                res=sub(res,s.substr(1));
            }
            else{
                res=add(res,s);
            }
        }
    }
    res=div_10(res,10);
    cout << res << endl;
}
0