구현과 관련된 문제이다. 구현을 하란 대로 해주면 된다.
여성의 경우 대칭된 부분까지 스위치를 바꿔주고 남성의 경우 배수만큼 스위치를 바꿔주면 되는 것이다.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, S;
cin >> N;
vector<bool> sw(N + 1);
for (int i = 1; i <= N; ++i)
{
bool s;
cin >> s;
sw[i] = s;
}
cin >> S;
while (S--)
{
int gender, num;
cin >> gender >> num;
if (gender == 1)
{
for (int i = num; i <= N; i += num)
{
sw[i] = !sw[i];
}
}
else
{
int low, high;
low = high = num;
while (true)
{
if (low == 1 || high == N)
{
break;
}
if (sw[low - 1] == sw[high + 1])
{
--low;
++high;
}
else
break;
}
for (int i = low; i <= high; ++i)
{
sw[i] = !sw[i];
}
}
}
for (int i = 1; i <= N; ++i)
{
cout << sw[i] << " ";
if (!(i % 20))
cout << "\n";
}
return 0;
}
쉬운 문제이지만 20개씩 나눠서 출력해줘야 한다는 점을 놓치면 안 된다.