問題描述
小明得到了一個長度為?nn?的字符串?ss?,該字符串都是由數字?00?和?11?組成,并且下標從?11?開始,小明現在需要對這個字符串進行?qq?次操作,每次操作包含以下兩種操作之一:
-
操作?11?:小明查詢該字符串中第一次出現?11?的位置,并將其輸出,如果字符串中不存在?11?則輸出??1?1?。
-
操作?22?:小明選擇一個下標,將字符串?ss?中對應該下標的值反轉,即?11?變為?00?,00?變為?11?。
小明想在短時間內快速計算出每次操作二的值,你能幫幫他嗎。
輸入格式
第一行,包含兩個正整數?n,qn,q?(1≤n,q≤2×105)(1≤n,q≤2×105)?,分別代表字符串長度和操作次數。
第二行,一個字符串?ss?(1≤∣s∣≤n)(1≤∣s∣≤n)?,代表輸入的字符串。
接下來?qq?行,每行輸入格式為一下之一:
1
?,代表小明要查詢該字符串中第一次出現?11?的位置,并將其輸出。2 x
?,代表將字符串中下標為?xx?的字符反轉。
輸出格式
對于每個操作?11?,小明都會輸出一行,包含一個正整數,代表該字符串中第一次出現?11?的位置,如果字符串中不存在?11?則輸出??1?。
package com.cjh.lanqiao;import java.util.Scanner;//01小游戲
public class Main78 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int q = scanner.nextInt();String s = scanner.next();char[] chars = s.toCharArray();while(q-->0) {int order = scanner.nextInt();if (order == 1) {//如果是操作1,查找第一次1出現位置for (int j = 0; j < chars.length; j++) {if (chars[j] == '1') {System.out.println(j + 1);break;}}}else {//如果是操作2int index = scanner.nextInt();if (chars[index - 1] == '1') {chars[index - 1] = '0';}else {chars[index - 1] = '1';}}}}
}