#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 1000000
int main() {
char s[N];
FILE *fp = fopen("input.txt", "r");
if (!fp) {
perror("Error opening file");
return 1;
}
if (fread(s, 1, N, fp) != N) {
perror("Error reading file");
fclose(fp);
return 1;
}
fclose(fp);
int A = 0, B = 0, C = 0, D = 0;
int *zeros = malloc(N * sizeof(int));
int num_zeros = 0;
int *ones = malloc(N * sizeof(int));
int num_ones = 0;
// 统计转移次数并收集0->0和1->1的位置
for (int i = 0; i < N; i++) {
char current = s[i];
char next = s[(i + 1) % N];
if (current == '0') {
if (next == '0') {
A++;
zeros[num_zeros++] = i;
} else {
B++;
}
} else {
if (next == '1') {
D++;
ones[num_ones++] = i;
} else {
C++;
}
}
}
int k = A - 250000;
if (k != 0) {
if (k > 0) {
// 需要减少0->0和1->1的转移
if (num_zeros < k || num_ones < k) {
fprintf(stderr, "Not enough 0->0 or 1->1 transitions to adjust.\n");
free(zeros);
free(ones);
return 1;
}
for (int i = 0; i < k; i++) {
int iz = zeros[i];
s[(iz + 1) % N] = '1';
int io = ones[i];
s[(io + 1) % N] = '0';
}
} else {
// k < 0,需要增加0->0和1->1的转移
int k_abs = -k;
int *zero_ones = malloc(N * sizeof(int));
int num_zo = 0;
int *one_zeros = malloc(N * sizeof(int));
int num_oz = 0;
for (int i = 0; i < N; i++) {
char current = s[i];
char next = s[(i + 1) % N];
if (current == '0' && next == '1') {
zero_ones[num_zo++] = i;
} else if (current == '1' && next == '0') {
one_zeros[num_oz++] = i;
}
}
if (num_zo < k_abs || num_oz < k_abs) {
fprintf(stderr, "Not enough 0->1 or 1->0 transitions to adjust.\n");
free(zero_ones);
free(one_zeros);
free(zeros);
free(ones);
return 1;
}
for (int i = 0; i < k_abs; i++) {
int iz = zero_ones[i];
s[(iz + 1) % N] = '0';
int io = one_zeros[i];
s[(io + 1) % N] = '1';
}
free(zero_ones);
free(one_zeros);
}
}
free(zeros);
free(ones);
// 写入结果
fp = fopen("output.txt", "w");
if (!fp) {
perror("Error opening output file");
return 1;
}
fwrite(s, 1, N, fp);
fclose(fp);
return 0;
}