不太能理解
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, len, pre[1001], sumsit, k;
string s;
int ans;
cin >> n;
getchar();
while (getline(cin, s)) {
len = (int)s.length();
if (len < n - 1 || len > n + 1) puts("-1");
if (len == n) {
sumsit = 0;
for (int i = 0; i < len; i++) {
if (s[i] == '1') {
sumsit += i + 1;
}
}
k = sumsit % (n + 1);
if (k == 0) {
cout << s << '\n';
continue;
}
if (s[k - 1] == '1') {
s[k - 1] = '0';
cout << s << '\n';
continue;
}
cout << -1 << endl;
}
if (len == n - 1) {
pre[0] = 0, sumsit = 0;
if (s[0] == '1') {
pre[0] = 1;
sumsit += 1;
}
for (int i = 1; i < len; i++) {
if (s[i] == '1') {
pre[i] = pre[i - 1] + 1;
sumsit += i + 1;
} else pre[i] = pre[i - 1];
}
k = sumsit % (n + 1);
if (!k || pre[len - 1] + k >= n + 1) {
ans = -1;
if (pre[len - 1] + k == n + 1) ans = 0;
else for (int i = 1; i < len; i++) {
if (pre[len - 1] - pre[i - 1] + k == n + 1) {
ans = i;
break;
}
}
if (ans != -1) {
for (int i = 0; i <= ans - 1; i++) {
cout << s[i];
}
cout << '0';
for (int i = ans; i < len; i++) {
cout << s[i];
}
} else {
if (k == 0) cout << s << '0';
else cout << -1;
}
cout << '\n';
memset(pre, 0, sizeof(pre));
continue;
} else {
ans = -1;
if (pre[len - 1] + k + 1 == n + 1) ans = 0;
else for (int i = 1; i < len; i++) {
if (pre[len - 1] - pre[i - 1] + k + i + 1 == n + 1) {
ans = i;
break;
}
}
if (ans != -1) {
for (int i = 0; i <= ans - 1; i++) {
cout << s[i];
}
cout << '1';
for (int i = ans; i < len; i++) {
cout << s[i];
}
} else {
if ((pre[len - 1] + n) % (n + 1) == 0) cout << s << '1';
else cout << -1;
}
cout << '\n';
memset(pre, 0, sizeof(pre));
continue;
}
}
if (len == n + 1) {
pre[0] = 0, sumsit = 0, ans = -1;
if (s[0] == '1') {
pre[0] = 1;
sumsit += 1;
}
for (int i = 1; i < len; i++) {
if (s[i] == '1') {
pre[i] = pre[i - 1] + 1;
sumsit += i + 1;
} else pre[i] = pre[i - 1];
}
bool flag = false;
for (int i = 0; i < len; i++) {
if (s[i] == '1') {
if ((sumsit - i - 1 -(pre[len - 1] - pre[i])) % (n + 1) == 0) {
ans = i;
flag = true;
break;
}
} else {
if ((sumsit - (pre[len - 1] - pre[i])) % (n + 1) == 0) {
ans = i;
flag = true;
break;
}
}
}
if (flag) {
for (int i = 0; i < ans; i++) {
cout << s[i];
}
for (int i = ans + 1; i < len; i++) {
cout << s[i];
}
} else cout << -1;
cout << '\n';
continue;
}
}
return 0;
}