QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#647352#5460. Sum of NumberscrychicWA 96ms3688kbC++176.8kb2024-10-17 13:30:462024-10-17 13:30:47

Judging History

你现在查看的是最新测评结果

  • [2024-10-17 13:30:47]
  • 评测
  • 测评结果:WA
  • 用时:96ms
  • 内存:3688kb
  • [2024-10-17 13:30:46]
  • 提交

answer

#include<bits/stdc++.h>
// #pragma GCC optimize(3)
// #pragma GCC target("avx")
// #pragma GCC optimize("Ofast")
// #pragma GCC optimize("inline")
// #pragma GCC optimize("-fgcse")
// #pragma GCC optimize("-fgcse-lm")
// #pragma GCC optimize("-fipa-sra")
// #pragma GCC optimize("-ftree-pre")
// #pragma GCC optimize("-ftree-vrp")
// #pragma GCC optimize("-fpeephole2")
// #pragma GCC optimize("-ffast-math")
// #pragma GCC optimize("-fsched-spec")
// #pragma GCC optimize("unroll-loops")
// #pragma GCC optimize("-falign-jumps")
// #pragma GCC optimize("-falign-loops")
// #pragma GCC optimize("-falign-labels")
// #pragma GCC optimize("-fdevirtualize")
// #pragma GCC optimize("-fcaller-saves")
// #pragma GCC optimize("-fcrossjumping")
// #pragma GCC optimize("-fthread-jumps")
// #pragma GCC optimize("-funroll-loops")
// #pragma GCC optimize("-fwhole-program")
// #pragma GCC optimize("-freorder-blocks")
// #pragma GCC optimize("-fschedule-insns")
// #pragma GCC optimize("inline-functions")
// #pragma GCC optimize("-ftree-tail-merge")
// #pragma GCC optimize("-fschedule-insns2")
// #pragma GCC optimize("-fstrict-aliasing")
// #pragma GCC optimize("-fstrict-overflow")
// #pragma GCC optimize("-falign-functions")
// #pragma GCC optimize("-fcse-skip-blocks")
// #pragma GCC optimize("-fcse-follow-jumps")
// #pragma GCC optimize("-fsched-interblock")
// #pragma GCC optimize("-fpartial-inlining")
// #pragma GCC optimize("no-stack-protector")
// #pragma GCC optimize("-freorder-functions")
// #pragma GCC optimize("-findirect-inlining")
// #pragma GCC optimize("-fhoist-adjacent-loads")
// #pragma GCC optimize("-frerun-cse-after-loop")
// #pragma GCC optimize("inline-small-functions")
// #pragma GCC optimize("-finline-small-functions")
// #pragma GCC optimize("-ftree-switch-conversion")
// #pragma GCC optimize("-foptimize-sibling-calls")
// #pragma GCC optimize("-fexpensive-optimizations")
// #pragma GCC optimize("-funsafe-loop-optimizations")
// #pragma GCC optimize("inline-functions-called-once")
// #pragma GCC optimize("-fdelete-null-pointer-checks")
// #pragma GCC optimize(2)
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;

vector<int> add(const vector<int> &a,const vector<int> &b) {
    if(a.size() < b.size()) return add(b, a);
    vector<int> c;
    int t = 0;
    for(int i = 0; i < a.size(); i ++ ) {
        t += a[i];
        if(b.size() > i) t += b[i];
        c.push_back(t % 100000000)  ;
        t /= 100000000;
    }
    if(t) c.push_back(t);
    return c;
}

void print(const vector<int> &c) {
    for(int i = c.size() - 1; i >= 0; i -- ){
        if(i != c.size() - 1) cout << setw(8) << setfill('0') << c[i];
        else cout << c[i];
        // cout << c[i];
    }
        
    cout << '\n';
}

bool cmp(const vector<int> &a, const vector<int> &b) {
    if(a.size() > b.size()) return true;
    else if(a.size() < b.size()) return false;
    for(int i = a.size() - 1; i >= 0; i -- ) {
        if(a[i] != b[i]) {
            return a[i] > b[i];
        }
    }
    return false;
}

void solve() {
    int n, k;
    cin >> n >> k;
    string s;
    cin >> s;
    int has = n / (k + 1) - 1;
    int other = n % (k + 1) + k + 1;
    vector<int> ans;
    vector<int> p(10);
    p[0] = 1;
    for(int i = 1;i < 10;i ++) p[i] = p[i - 1] * 3;
    auto work = [&](){
        for(int i = 0;i < p[k + 1] - 1;i ++){
            int cnt = 0;
            int ti = i;
            for(int j = 0;j < k + 1;j ++){
                cnt += ti % 3;
                ti /= 3;
            }
            if(cnt == other){
                int now = 0;
                ti = i;
                vector<int> c;
                for(int j = 0;j < k + 1;j ++){
                    vector<int> a;
                    for(int z = now + has + (ti % 3) - 1; z >= now; z -= 8) {
                        int tmp = 0;
                        int p = 1;
                        for(int k = 0; k < 8; k ++ ){
                            if(z- k >= now)tmp += (s[z - k] - '0') * p;
                            p *= 10;
                        }
                        a.push_back(tmp);
                       
                        ti /= 3;    
                    }
                    c = add(c,a); 
                    now = now + has + (ti % 3);
                }
                if(ans.size() == 0) {
                    ans = c;
                } else {
                    if(cmp(ans, c)) {
                        ans = c;
                    }
                }
            }
        }
        return ;
    };
    work();
    has ++;
    other -= k + 1;
    // for(int i = 0; i < (1 << 2 * (k + 1)); i ++ ) {
    //     int cnt = 0;
    //     bool er = 0;
    //     for(int j = 0; j < 2 * (k + 1); j += 2) {
    //         int tmp = 0;
    //         if((i >> j) & 1) {
    //             cnt ++ ;
    //             tmp += 2;
    //         }
    //         if((i >> (j + 1)) & 1) {
    //             if((i >> j) & 1)cnt ++;
    //             tmp += 1;
    //         }
    //         if(tmp == 1) {
    //             er = 1;
    //             break;
    //         }
    //         if(has == 0 && tmp == 0){
    //             er = 1;
    //         }
    //     }
    //     if(er) continue;
    //     vector<int> c;
    //     if(cnt == other) {
    //         int now = 0;
    //         for(int j = 0; j < 2 * (k + 1); j += 2) {
    //             vector<int> a;
    //             for(int z = now + has + ((i >> j) & 1) + ((i >> j + 1) & 1) - 1; z >= now; z -= 8) {
    //                 int tmp = 0;
    //                 int p = 1;
    //                 for(int k = 0; k < 8; k ++ ){
    //                     if(z - k >= now)tmp += (s[z - k] - '0') * p;
    //                     p *= 10;
    //                 }
    //                 a.push_back(tmp);
    //                 // cout << z << ' ' << tmp << '\n';
    //             }
    //             // print(a);
    //             now = now + has + ((i >> j) & 1) + ((i >> j + 1) & 1);
    //             c = add(c, a);
    //         }
    //         // print(c);
    //         // cout << '\n';
    //         if(ans.size() == 0) {
    //             ans = c;
    //         } else {
    //             if(cmp(ans, c)) {
    //                 ans = c;
    //             }
    //         }
    //     }
    // }
    work();
    // 8174657
    // if(ans.size() == 25 && ans[0] == 8 && ans[1] == 1 && ans[2] == 7 && ans[3] == 4 && ans[4] == 6 && ans[5] == 5 && ans[6] == 7){
    //     cout << k << "?" << s.size() << "?" << s << '\n';
    // }
    print(ans);
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    
    int t = 1;
    cin >> t;
    while(t -- ) {
        solve();
    }

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3620kb

input:

2
8 1
45455151
2 1
42

output:

9696
6

result:

ok 2 lines

Test #2:

score: -100
Wrong Answer
time: 96ms
memory: 3688kb

input:

10
1301 6
56328399613959594774559774218276494124991536454496431869449134772679831477279356599352619469813771742358572734317965823527349354276551857226632977613336815474383422853946661428822284645652423563864641261338984158269966469425994769486371736593879954275146732544891889693921182364554588732946...

output:

85672700895277460915772693671260630681792139876433977721486371265011042895070373065912465661810521516989806576456011154148922456436049367795187665203897479582308326859176886406540448358
417558922730395929215422634906837223389852302115876222038106418686504192595983680537510266936427794728997206071754...

result:

wrong answer 1st lines differ - expected: '286183755510664079479706773787...6909797866802717925250679901255', found: '856727008952774609157726936712...9582308326859176886406540448358'