QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#149532#5460. Sum of NumbersinvernoWA 459ms5612kbC++142.0kb2023-08-24 19:49:312023-08-24 19:49:32

Judging History

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

  • [2023-08-24 19:49:32]
  • 评测
  • 测评结果:WA
  • 用时:459ms
  • 内存:5612kb
  • [2023-08-24 19:49:31]
  • 提交

answer

#include<bits/stdc++.h>

using namespace std;

const int N = 200050/7; 
struct big{
    int n;
    short a[N];
}ans, nw;
bool inti = 1;
int n, k; 
string st;

big operator + (big a, big b) {
    int m = max(a.n, b.n);
    big c;
    c.n = m;
    c.a[m + 1] = 0;
    for (int i = a.n + 1;i <= m;++ i) a.a[i] = 0;
    for (int i = b.n + 1;i <= m;++ i) b.a[i] = 0;
    for (int i = 1;i <= m;++ i) {
        c.a[i] = a.a[i] + b.a[i];
        if (c.a[i] > 9) {
            c.a[i] -= 10;
            c.a[i+1] += 1;
        }
    }
    if (c.a[m + 1] != 0) ++ c.n;
    return c;
}
bool operator < (big &a, big &b) {
    if (a.n != b.n) {
        return a.n < b.n;
    }
    for (int i = a.n;i >= 1;-- i) {
        if (a.a[i] != b.a[i]) 
            return (a.a[i] < b.a[i]);
    }
    return false;
}

big cp(int x, int y) {
    big c;
    c.n = 0;
    for (int i = y;i >= x;-- i) {
        c.a[++c.n] = st[i - 1] - '0';
    }
    return c;
}

void dfs(int d, int j, big nw, int len) {
    if (d == k) {
        if (abs(n - j + 1 - len) > 1) return;
        big nw2 = cp(j, n);
        nw = nw + nw2;

        if (inti || nw < ans) {
            ans = nw;
            inti = false;
        }
        return ;
    }
    if (j > n) return;
    for (int h = -1;h <= 1;++ h){
      int i = h + len; 
      if (i <= 0) continue;
      big nw2 = nw + cp(j,j + i - 1); //!!!
      if (j + i <= n + 1)
        dfs(d + 1, j + i, nw2, i);
    }
    return;
}

int main(){
    ios::sync_with_stdio(false); cin.tie(0);
    
    int tcase = 0;
    cin >> tcase;
    while (tcase --) {
      inti = 1;
      
      cin >> n >> k;
      ++ k;
      cin >> st;
      int L = max((int)((double)2 * n / k - (k - 1))/2,1);
      int R = min(L + k - 1, n);
      for (int i = L;i <= R;++ i) 
        dfs(2, i + 1, nw = cp(1,i), i);

      for (int i = ans.n;i >= 1;-- i) cout << ans.a[i];
      cout << endl;
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 4028kb

input:

2
8 1
45455151
2 1
42

output:

9696
6

result:

ok 2 lines

Test #2:

score: -100
Wrong Answer
time: 459ms
memory: 5612kb

input:

10
1301 6
56328399613959594774559774218276494124991536454496431869449134772679831477279356599352619469813771742358572734317965823527349354276551857226632977613336815474383422853946661428822284645652423563864641261338984158269966469425994769486371736593879954275146732544891889693921182364554588732946...

output:

1120855517662654149697334055050824696470196072685564229397740445548524409959860621848657812438004738947316997563377006735917364092696598132475542312015911120188106165065117094736481700802
1017235131709931618326767123235439696560713096565871102337923351852444907556879400380422258185074234426678795149...

result:

wrong answer 1st lines differ - expected: '286183755510664079479706773787...6909797866802717925250679901255', found: '112085551766265414969733405505...0188106165065117094736481700802'