WA#6,#7
查看原帖
WA#6,#7
553601
乖,摸摸头楼主2022/9/22 12:27

不太能理解

#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;
}

2022/9/22 12:27
加载中...