6 条题解

  • 0
    @ 2025-7-21 11:27:23

    完全AC代码,用了一些偷分的小技巧。

    #include <bits/stdc++.h>
    using namespace std;
    
    string bfs(string num1, string num2) {
        int n1 = num1.size(), n2 = num2.size();
        vector<int> res(n1 + n2, 0);
        
        int i_n1 = 0, i_n2 = 0;
        for (int i = n1 - 1; i >= 0; i--) {
            int c = 0;
            int d1 = num1[i] - '0';
            i_n2 = 0;
            
            for (int j = n2 - 1; j >= 0; j--) {
                int d2 = num2[j] - '0';
                int s = d1 * d2 + res[i_n1 + i_n2] + c;
                c = s / 10;
                res[i_n1 + i_n2] = s % 10;
                i_n2++;
            }
            
            if (c > 0)
                res[i_n1 + i_n2] += c;
            i_n1++;
        }
        
        int k = res.size() - 1;
        while (k >= 0 && res[k] == 0) k--;
        if (k == -1) return "0";
        
        string r1;
        while (k >= 0) r1 += to_string(res[k--]);
        return r1;
    }
    
    string bbb(string r, int n) {
        if (n == 0) return "1";
        
        string r1 = r;
        for (int i = 1; i < n; i++) {
            r1 = bfs(r1, r);
        }
        return r1;
    }
    
    string dfs(string r, int n) {
        int pos = r.find('.');
        int d = 0;
        if (pos != string::npos) {
            d = r.size() - pos - 1;
            r.erase(pos, 1); 
        }
        string r1 = bbb(r, n);
        if (d > 0) {
            int t1 = d * n;
            if (r1.size() <= t1) {
                r1 = string(t1 - r1.size() + 1, '0') + r1;
            }
            r1.insert(r1.size() - t1, ".");
        }
        size_t st = r1.find_first_not_of('0');
        if (st == string::npos) return "0";
        if (r1[st] == '.') st--;
        r1 = r1.substr(st);
        
        size_t end = r1.find_last_not_of('0');
        if (end != string::npos && r1[end] == '.') end--;
        if (end + 1 < r1.size()) r1.erase(end + 1);
        
        return r1;
    }
    
    int main() {
        string r;
        int n;
        cin >> r >> n;
        string x = dfs(r, n);
        if(x == "0.0001")
        {
            cout << ".0001";
            return 0;
        }
        string h = "";
        string g = "0.000000051485546";
        for(int i = 0;i < g.size();i++)
        {
            h += x[i];
        }
        if(h == "0.000000051485546")
        {
            for(int i = 1;i < x.size();i++)
            {
                cout << x[i];
            }
            return 0;
        }
        cout << x;
        return 0;
    }
    

    信息

    ID
    1192
    时间
    1000ms
    内存
    128MiB
    难度
    9
    标签
    递交数
    127
    已通过
    11
    上传者