import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Switch_On_Off {
static int[] swit;
static int cnt;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
cnt = Integer.parseInt(st.nextToken());
swit = new int[cnt+1];
st = new StringTokenizer(br.readLine());
for(int i = 1; i<cnt+1; i++){
swit[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
int humanNum = Integer.parseInt(st.nextToken());
int sex;
int num;
for (int i = 0; i<humanNum; i++) {
st = new StringTokenizer(br.readLine());
sex = Integer.parseInt(st.nextToken());
num = Integer.parseInt(st.nextToken());
if(sex == 1){
man(num);
}
else if(sex==2){
woman(num);
}
}
for(int i = 1; i<cnt+1; i++){
System.out.print(swit[i] + " ");
if(i%20==0)
System.out.println();
}
}
public static void man(int num){
for(int i = 1; num*i<cnt+1; i++){
if(swit[num*i]==1){
swit[num*i]=0;
}
else if(swit[num*i]==0){
swit[num*i] = 1;
}
}
}
public static void woman(int num){
for(int i = 0; num+i<cnt+1; i++){
if(num-i<1)
break;
if(swit[num+i]==swit[num-i]){
if(swit[num+i]==1){
swit[num+i]=0;
swit[num-i]=0;
}
else if(swit[num+i]==0){
swit[num+i]=1;
swit[num-i]=1;
}
}
else {
break;
}
}
}
}
풀이방법
- 입력값에서 남학생인지, 여학생인지 구분해서 로직을 구성한다.
- 남학생일때 번호의 배수에 해당하는 스위치값을 바꾼다.
- 여학생일때, (내 번호 + i값)과 (내번호 - i값)이 같으면 두 값에 해당하는 스위치값을 바꾼다.(i를 0부터 설정하는것에 주의, 스위치의 범위 밖을 탐색하지 않도록 주의)
- 다르면 바로 함수를 종료한다.
- 출력값이 20번째에서 줄바꿈을 하도록 출력한다.
후기
- 스위치 사이에만 빈칸이 있으라고 문제에 나와있었는데, 그럼 마지막 스위치 뒤에는 빈칸이 없어야하는거 아닌가...? 이것때매 뻘짓했네