QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#894013#1289. A + B Problemywli08RE 0ms0kbC++141.7kb2025-02-11 10:42:342025-02-11 10:42:46

Judging History

This is the latest submission verdict.

  • [2025-02-11 10:42:46]
  • Judged
  • Verdict: RE
  • Time: 0ms
  • Memory: 0kb
  • [2025-02-11 10:42:34]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e6+5;

int T;
int n, m;
string s;
ll pre[maxn];
ll id[maxn];

string add(string a, string b){
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    while(a.size() < b.size()) a += '0';
    while(b.size() < a.size()) b += '0';
    string c = ""; int r = 0;
    for(int i = 0;i < a.size() && i < b.size();i++){
        c += '0' + (a[i] - '0' + b[i] - '0' + r) % 2;
        r = (a[i] - '0' + b[i] - '0' + r) / 2;
    }
    if(r) c += r + '0';
    while(c.size() > 1 && c.back() == '0') c.pop_back();
    reverse(c.begin(), c.end());
    return c;
}

void _main(){
    cin >> n >> m;
    if(n > m) swap(n, m);
    cin >> s;
    s = ' ' + s;
    int cnt[2] = {0, 0};
    for(int i = 1;i <= n + m;i++){
        cnt[s[i] - '0'] ++;
        pre[i] = cnt[1];
        if(s[i] == '1') id[cnt[1]] = i;
    }
    string a = "", b = "";
    int ca = 0, cb = 0;
    for(int i = 1;i <= n + m;i++){
        int diff = (m - (int)b.size()) - (n - (int)a.size());
        if(a.size() < n && (s[i] == '0' ||
        (s[i] == '1' && id[pre[i] + diff + 1] && (id[pre[i] + diff + 1] - i - (diff + 1) <= (ll)(n - a.size() - 1))))){
            a += s[i]; ca += s[i] == '1';
        }
        else b += s[i], cb += s[i] == '1';
        if(n - a.size() > m - b.size()) swap(n, m), swap(a, b);
    }
    cerr << a << ' ' << b << endl;
    cout << add(a, b) << endl;
    for(int i = 1;i <= n + m;i++){
        id[i] = pre[i] = 0;
    }
}

int main(){
    freopen("partition.in", "r", stdin);
    freopen("partition.out", "w", stdout);
    cin >> T;
    while(T--){
        _main();
    }
}

詳細信息

Test #1:

score: 0
Dangerous Syscalls

input:

3
4 3
1000101
2 2
1111
1 1
00

output:


result: