BOJ-1244スイッチオン/オフ(C++)

17086 ワード

質問元:https://www.acmicpc.net/problem/1244
問題の難易度
Silver 4
問題の処理方法
論理を理解して編成すればいい.
でも微妙に和弦が違うのにずっと間違っていたので驚きました.
パスコード
#include <iostream>
#include <algorithm>

using namespace std;

int arr[101];
int N;

void ifGirl(int n) {
	int left = n - 1;
	int right = n + 1;
	arr[n] = !arr[n];
	while (left >= 1 && right <= N) {
		if (arr[left] != arr[right]) {
			break;
		}
		arr[left] = !arr[left];
		arr[right] = !arr[right];
		left--;
		right++;
	}
}

void ifBoy(int n) {
	for (int i = n; i <= N; i += n) {
		arr[i] = !arr[i];
	}
}

int main() {
	
	cin >> N;
	for (int i = 1; i <= N; i++) {
		cin >> arr[i];
	}
	int type;
	cin >> type;
	for (int i = 0; i < type; i++) {
		int sex, n;
		cin >> sex >> n;
		if (sex == 1) {

			ifBoy(n);
		}
		else ifGirl(n);
	}

	for (int i = 1; i <= N; i++) {
		cout << arr[i] << " ";
		if (i % 20 == 0) cout << "\n";
	}
	return 0;
}
フィードバック
なぜコードが間違っているのかまだ分かりません
#include <iostream>
#include <algorithm>

using namespace std;

int arr[101];
int N;

void ifGirl(int n) {
	int left = n - 1;
	int right = n + 1;
	while (left >= 1 && right <= N) {
		if (arr[left] != arr[right]) {
			arr[n] = !arr[n];
			return;
		}
		left--;
		right++;
	}
	for (int i = left + 1; i < right; i++) {
		arr[i] = !arr[i];
	}
}

void ifBoy(int n) {
	int num = 1;
	while (n * num <= N) {
		n = n * num;
		arr[n] = !arr[n];
		num++;
	}
}

int main() {
	
	cin >> N;
	for (int i = 1; i <= N; i++) {
		cin >> arr[i];
	}
	int type;
	cin >> type;
	for (int i = 0; i < type; i++) {
		int sex, n;
		cin >> sex >> n;
		if (sex == 1) {

			ifBoy(n);
		}
		else ifGirl(n);
	}

	for (int i = 1; i <= N; i++) {
		cout << arr[i] << " ";
		if (i % 20 == 0) cout << "\n";
	}
	return 0;
}