QOJ.ac

QOJ

时间限制: 2 s 内存限制: 512 MB 总分: 100

#10356. Генетическая последовательность

统计

Srwudi — выдающийся биолог, занимающийся генной инженерией. Один из его проектов требует исследования количества фрагментов генов в образце ДНК. Обработанная цепочка ДНК представляет собой строку $S$, и любая подстрока $S$ может быть геном. Для подстроки $S[l..r]$, состоящей из символов с $l$-го по $r$-й, если $S[l..r]$ является палиндромом (строка $T$ называется палиндромом, если она читается одинаково в обоих направлениях), то $S[l..r]$ считается геном. Заметьте, что разные гены могут перекрываться. Например, в строке $aba$ содержится 4 гена: $S[1..1]=a, S[2..2]=b, S[3..3]=a, S[1..3]=aba$. Однако строка $S$ может содержать много функционально идентичных генов. Два гена $T$ и $P$ считаются различными, если выполняется хотя бы одно из следующих условий:

  1. Длина $T$ не равна длине $P$.
  2. Существует такая позиция $j$, что $T[j] \not= P[j]$, где $T[j]$ и $P[j]$ — символы на позиции $j$ в соответствующих строках.

Например, в строке $aba$ содержится только 3 функционально различных гена. Srwudi хочет знать, сколько функционально различных генов содержится в данной строке ДНК.

Исследования часто сопряжены с трудностями. Из-за технических ограничений Srwudi не может гарантировать точность при извлечении образца $S$, и строка $S$ может представлять собой множество переплетенных фрагментов ДНК. Поэтому Srwudi сначала разворачивает извлеченный материал в цепочку длины $N$, обозначим её $A$. $A$ также является строкой. Далее Srwudi делает $Q$ предположений: каждый раз он выбирает подстроку $A[l..r]$, считает её допустимым фрагментом ДНК и вычисляет количество функционально различных генов в $A[l..r]$. Если $Q$ достаточно велико, а предположения Srwudi точны, генная инженерия сможет продвинуться вперед.

Однако, готовясь к работе, Srwudi осознал сложность задачи: он не может быстро определить количество функционально различных генов в строке $S$. Поэтому он обратился к вам за помощью. Поскольку предположения Srwudi не случайны, данные, полученные после каждого предположения, влияют на следующее, поэтому часть входных данных зашифрована.

Входные данные

Первая строка содержит целое число $type$. Если $type=0$, данные не зашифрованы. Если $type=1$, данные зашифрованы.

Вторая строка содержит два целых числа $N$ и $Q$, где $N$ — длина образца $A$, а $Q$ — количество предположений Srwudi. Далее следуют $Q$ строк, каждая из которых содержит два целых числа $L', R'$. Пусть $lastans$ — ответ на предыдущее предположение (если это первое предположение, то $lastans=0$). Тогда текущие $L$ и $R$ вычисляются как $L=L' \oplus (type \times lastans)$ и $R=R' \oplus (type \times lastans)$.

Выходные данные

Выведите $Q$ строк, каждая из которых содержит одно целое число — количество функционально различных генов в подстроке $A[L..R]$ для соответствующего предположения.

Примеры

Входные данные 1

1
8 4
abbabbba
1 7
3 2
6 10
6 0

Выходные данные 1

7
2
5
3

Примечание

Расшифрованные предположения:

1 7 Подстрока: abbabbb, функционально различные гены: a, b, bb, bab, bbb, abba, bbabb

4 5 Подстрока: ab, функционально различные гены: a, b

4 8 Подстрока: abbba, функционально различные гены: a, b, bb, bbb, abbba

3 5 Подстрока: bab, функционально различные гены: a, b, bab

Ограничения

Для всех данных выполняется $Q \leq 2N$, а расшифрованные $L, R$ удовлетворяют условию $1 \leq L \leq R \leq N$.

Номер теста $N$ не более $type$
1 100 1
2 1000
3
4
5 30000 0
6
7
8 100000
9
10
11 1
12
13
14
15
16
17
18
19
20

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.