Я пытаюсь решить этот вопрос: двоичные запросы,
https://www.hackerearth.com/practice/data-structures/arrays/1-d/practice-problems/algorithm/range-query-2/
Краткое содержание вопроса: дано N цифр двоичных чисел;Затем задаются Q запросов.Два типа запросов: «0 X»: перевернуть X-й бит «1 LR»: вывести, если двоичное нет.формируется из L в R (положение) нечетное или четное.
Простое решение - проверить только самый правый бит;если это 1, число нечетное, иначе, четное.
Мой код выдает «Неправильный ответ» каждый раз;однако, во всех тестовых случаях есть только один неправильный вывод, и этот неправильный вывод происходит ровно за 99 строк до общего числа выходных строк *.Похоже, другого шаблона не существует.
* Я попытался перевернуть вывод, когда достигну (Q-99) -ого запроса для проверки;однако невозможно найти количество выходных запросов без сохранения всех запросов, поскольку тип запроса [0] не имеет выходных данных, а только тип 1 имеет выходные данные.Таким образом, нельзя использовать Q.
Изображения: Сбой всех тестовых случаев Пример 1. Единственная строка ошибки Пример 2. Другой пример .
Вот мой код:
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inpArr[] = (br.readLine().split("\\s"));
int n=Integer.parseInt(inpArr[0]); //number of digits
int q=Integer.parseInt(inpArr[1]); //number of queries
//read binary digits w/o space, and store them as chars
String binArrStr=br.readLine().replace(" ","");
char[] binArr=binArrStr.toCharArray();
int i;
for(i=0;i<q;i++) //all queries
{
String query[]=br.readLine().split("\\s"); //read the query
if(query[0].equals("1")) //Flip the bit if query[0]=1
{
if(binArr[Integer.parseInt(query[1])-1]=='1') //take position(query[1]) as int and flip
binArr[Integer.parseInt(query[1])-1]='0';
else
binArr[Integer.parseInt(query[1])-1]='0';
}
else //Print odd or even if query[0]=0
{
//query[1] is leftmost bit.
//Sufficient to check only the bit in rightmost position, given by
//3rd argument(Rightmost bit) which is query[2]
//If rightmost bit==1, ODD, else EVEN
if(binArr[Integer.parseInt(query[2])-1]=='1')
System.out.println("ODD");
else
System.out.println("EVEN");
}
}
}
Я мог бы пропустить эту проблему, но лучше знать, почему именно это происходит, я думаю.