下载数据后本地1ms出答案,洛谷TLE?
查看原帖
下载数据后本地1ms出答案,洛谷TLE?
1074084
asd890123楼主2024/6/6 18:23
#include <iostream>
#include <cstring>
#include <string>

#define maxn 4005
#define mod 10000

struct BigInterger{
    
    int a[maxn],len;
    
    int &operator[](int i){return a[i];}
    
     BigInterger(std::string s = "0"){
        
        int k = 1,j = 1;
        
        memset(a,0,sizeof(a));
        for (int i = s.length() - 1;i >= 0;i--){
            
            if (k == mod) j++,k = 1;
            a[j] += k * (s[i] - '0');
            k *= 10;
            
        }
        len = j;
        
    }
    
    BigInterger &operator=(std::string s){return *this = BigInterger(s);}
    
    void flatten(int l){
        
        len = l;
        for (int i = 1;i <= len;i++)
            a[i + 1] += a[i] / mod,a[i] %= mod;
        while (len > 1 && !a[len]) len--;
        
    }
    
    BigInterger operator*(BigInterger x){
        
        BigInterger ans;
        
        for (int i = 1;i <= len;i++)
            for (int j = 1;j <= x.len;j++)
                ans[i + j - 1] += a[i] * x[j];
        ans.flatten(len + x.len);
        
        return ans;
    }
    
};

std::istream &operator>>(std::istream &is,BigInterger &x){
    
    std::string s;
    
    is >> s;
    x = s;
    
    return is;
}

std::ostream &operator<<(std::ostream &os,BigInterger x){
    
    os << x[x.len];
    if (x.len == 1) return os;
    for (int i = x.len - 1;i;i--) os.width(4),os.fill('0'),os << x[i];
    
}

int main(){
    
    std::ios::sync_with_stdio(0);
    std::cin.tie(0),std::cout.tie(0);
    
    BigInterger a,b;
    
    std::cin >> a >> b;
    std::cout << a * b << '\n';
    
    return 0;
}
2024/6/6 18:23
加载中...