编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间
#25273 #2035. 早操 Time Limit Exceeded 27 16208 ms 424 K C++ 17 / 2.7 K 192023212331 2024-12-22 16:41:40
显示原始代码
#ifdef ONLINE_JUDGE
#pragma GCC optimize(2, "Ofast", "inline")
#endif
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define rt return


using namespace std;

const int N = 1e4 + 10;

int n, k;
int cnt = 0;

char str[N];
bool st[N];

int wen(int l, int r) {
    printf("? ");
    fflush(stdout);
    for (int i = 0; i < l; i++) {
        putchar(str[i]);
        fflush(stdout);
    }
    for (int i = l; i <= r; i++)
        if (str[i] == '0') {
            putchar('1');
            fflush(stdout);
        } else {
            putchar('0');
            fflush(stdout);
        }
    for (int i = r + 1; i < n; i++) {
        putchar(str[i]);
        fflush(stdout);
    }
    printf("\n");
    fflush(stdout);
    int res;
    scanf("%d", &res);
    fflush(stdout);
    if (res == k)
        return (r - l + 1) / 2;
    if (res - k == r - l + 1)
        return 0;
    if (k - res == r - l + 1)
        return r - l + 1;
    if (res > k)
        return ((r - l + 1) - (res - k)) / 2;
    if (k > res)
        return ((r - l + 1) - (k - res)) / 2;
}

void pan(int l, int r, int k1) {
    if (l > r)
        return;
    if (cnt == k)
        return;
    int mid = (l + r) >> 1;
    int a1 = wen(l, mid);
    if (a1 == 1 && r - l + 1 == 1) {
        st[l] = true;
        cnt++;
        return;
    }
    if (a1 == 1 && r - l + 1 == 2) {
        st[l] = true;
    }
    if (a1 == 0 && r - l + 1 == 2) {
        st[r] = true;
        cnt++;
    }
    if (r - l + 1 == 2) {
        if (k1 == 2 && a1 == 1) {
            st[r] = true;
            cnt++;
        }
        return;
    }
    if (a1 == 0) {
        if (cnt < k)
            pan(mid + 1, r, k1);
    }
    if (a1 == mid - l + 1) {
        for (int i = l; i <= mid; i++) {
            st[i] = true;
            cnt++;
        }
        if (cnt < k) {
            pan(mid + 1, r, k1 - a1);
        } else
            return;
    }
    if (a1 != mid - l + 1 && a1 != 0) {
        pan(l, mid, a1);
        if (cnt == k)
            return;
        pan(mid + 1, r, k1 - a1);
    }
}

int main() {
    cin >> n >> k;
    getchar();
    for (int i = 0; i < n; i++) {
        str[i] = getchar();
        if (i == 5000)
            fflush(stdout);
    }
    int l = 0, r = n - 1;
    pan(l, r, k);
    printf("! ");
    for (int i = 0; i < n; i++) {
        if (i == 5000) {
            fflush(stdout);
        }
        if (st[i]) {
            if (str[i] == '1') {
                putchar('0');
            } else {
                putchar('1');
            }
        } else {
            putchar(str[i]);
        }
    }
    printf("\n");
    fflush(stdout);
    int d;
    scanf("%d", &d);
    return 0;
}
子任务 #1
Time Limit Exceeded
得分:27
测试点 #1
Accepted
得分:100
用时:4 ms
内存:404 KiB

输入文件(0.in

111111
000000

Special Judge 信息

len is 6
k is 6
Congratulations!
You use 3 times to solve it!
测试点 #2
Accepted
得分:100
用时:4 ms
内存:400 KiB

输入文件(1.in

111111
111111

Special Judge 信息

len is 6
k is 0
Congratulations!
You use 0 times to solve it!
测试点 #3
Accepted
得分:100
用时:4 ms
内存:396 KiB

输入文件(2.in

0001101
1011001

Special Judge 信息

len is 7
k is 3
Congratulations!
You use 7 times to solve it!
测试点 #4
Time Limit Exceeded
得分:0
用时:2049 ms
内存:400 KiB

输入文件(3.in

0011000111101011111100101101111101011000011011101110011100000110000000110010000000100100100010000110
<19904 bytes omitted>

Special Judge 信息

len is 10000
k is 100

系统信息

Interactor Time Limit Exceeded. This is likely to happen if your program stuck.
测试点 #5
Time Limit Exceeded
得分:0
用时:2011 ms
内存:408 KiB

输入文件(4.in

1111110001001110100000110000110110011001111101111110011011111010101010110000000101001000111110010111
<19904 bytes omitted>

Special Judge 信息

len is 10000
k is 100

系统信息

Interactor Time Limit Exceeded. This is likely to happen if your program stuck.
测试点 #6
Time Limit Exceeded
得分:0
用时:2002 ms
内存:396 KiB

输入文件(5.in

1000110001000011111100111110100111011110011011000101010010100001010111100100000000001111010101010101
<19904 bytes omitted>

Special Judge 信息

len is 10000
k is 100

系统信息

Interactor Time Limit Exceeded. This is likely to happen if your program stuck.
测试点 #7
Time Limit Exceeded
得分:0
用时:2006 ms
内存:400 KiB

输入文件(6.in

0100110010011000100000011000010001111000000000001010010111000101110100010111100110010001101111111011
<19904 bytes omitted>

Special Judge 信息

len is 10000
k is 100

系统信息

Interactor Time Limit Exceeded. This is likely to happen if your program stuck.
测试点 #8
Time Limit Exceeded
得分:0
用时:2025 ms
内存:400 KiB

输入文件(7.in

0001001010110111010101111111101111010010101111011001000100100000110010110001110111111001101000001101
<19904 bytes omitted>

Special Judge 信息

len is 10000
k is 100

系统信息

Interactor Time Limit Exceeded. This is likely to happen if your program stuck.
测试点 #9
Time Limit Exceeded
得分:0
用时:2022 ms
内存:404 KiB

输入文件(8.in

0111100010101000011111111111101101011110001010111111000010101101110011101110111111111101001001000111
<19904 bytes omitted>

Special Judge 信息

len is 10000
k is 100

系统信息

Interactor Time Limit Exceeded. This is likely to happen if your program stuck.
测试点 #10
Time Limit Exceeded
得分:0
用时:2045 ms
内存:400 KiB

输入文件(13.in

1100010110110100110001111001111100000011000110110001001101110111110011010000001001000110100101100000
<19904 bytes omitted>

Special Judge 信息

len is 10000
k is 99

系统信息

Interactor Time Limit Exceeded. This is likely to happen if your program stuck.
测试点 #11
Time Limit Exceeded
得分:0
用时:2036 ms
内存:424 KiB

输入文件(14.in

0110010011101001100000111101010001000001011101110110101010110101111010111100101111100101010000001000
<19904 bytes omitted>

Special Judge 信息

len is 10000
k is 99

系统信息

Interactor Time Limit Exceeded. This is likely to happen if your program stuck.