小红的纸牌游戏【Python和C++实现】

#include <iostream>
#include <string>
#include <deque>

using namespace std;

string optimal_binary(int n, int k, const string &s) {
    deque<char> stack;
    int remove_count = n - k;
    int turn = 0; // 0: 小红删0,1: 小紫删1

    for (int i = 0; i < n; ++i) {
        char c = s[i];
        while (!stack.empty() && remove_count > 0) {
            char top = stack.back();
            if (turn == 0 && top == '0') {
                stack.pop_back();
                remove_count--;
                turn ^= 1;
            } else if (turn == 1 && top == '1') {
                stack.pop_back();
                remove_count--;
                turn ^= 1;
            } else {
                break;
            }
        }
        stack.push_back(c);
    }

    // 如果还有剩余删除次数,继续从右向左删除
    int i = stack.size() - 1;
    while (remove_count > 0 && i >= 0) {
        if (turn == 0) {
            // 小红删0
            while (i >= 0 && stack[i] != '0') i--;
            if (i >= 0) {
                stack.erase(stack.begin() + i);
                remove_count--;
                turn ^= 1;
                i = stack.size() - 1;
            }
        } else {
            // 小紫删1
            while (i >= 0 && stack[i] != '1') i--;
            if (i >= 0) {
                stack.erase(stack.begin() + i);
                remove_count--;
                turn ^= 1;
                i = stack.size() - 1;
            }
        }
    }

    // 取前 k 个字符作为结果
    string result;
    for (int i = 0; i < k; ++i) {
        result += stack[i];
    }
    return result;
}

int main() {
    int n, k;
    cin >> n >> k;
    string s;
    cin >> s;

    string ans = optimal_binary(n, k, s);
    cout << ans << endl;

    return 0;
}



#include <iostream>
#include <deque>
#include <vector>
#include <string>
using namespace std;

int main() {
    int n, k;
    cin >> n >> k;
    string s;
    cin >> s;

    int m = n - k;
    deque<int> q0, q1;
    vector<bool> deleted(n, false);

    for (int i = 0; i < n; i++) {
        if (s[i] == '0') {
            q0.push_back(i);
        } else {
            q1.push_back(i);
        }
    }

    for (int i = 0; i < m; i++) {
        if (i % 2 == 0) {
            if (!q0.empty()) {
                int idx = q0.front();
                q0.pop_front();
                deleted[idx] = true;
            } else {
                int idx = q1.front();
                q1.pop_front();
                deleted[idx] = true;
            }
        } else {
            if (!q1.empty()) {
                int idx = q1.front();
                q1.pop_front();
                deleted[idx] = true;
            } else {
                int idx = q0.front();
                q0.pop_front();
                deleted[idx] = true;
            }
        }
    }

    string result;
    for (int i = 0; i < n; i++) {
        if (!deleted[i]) {
            result += s[i];
        }
    }
    cout << result << endl;

    return 0;
}
from collections import deque

def main():
    n, k = map(int, input().split())
    s = input().strip()

    m = n - k
    q0 = deque()
    q1 = deque()
    deleted = [False] * n

    for i in range(n):
        if s[i] == '0':
            q0.append(i)
        else:
            q1.append(i)

    for i in range(m):
        if i % 2 == 0:
            if q0:
                idx = q0.popleft()
                deleted[idx] = True
            elif q1:
                idx = q1.popleft()
                deleted[idx] = True
        else:
            if q1:
                idx = q1.popleft()
                deleted[idx] = True
            elif q0:
                idx = q0.popleft()
                deleted[idx] = True

    result = ''.join(s[i] for i in range(n) if not deleted[i])
    print(result)

if __name__ == "__main__":
    main()
原文链接:,转发请注明来源!