QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 1024 MB Total points: 100 Difficulty: [show] Hackable ✓

#4658. Remover pedras

Statistics

Estás a jogar um pequeno jogo chamado «Remover pedras».

Há $n$ montes de pedras dispostos numa fila. O $i$-ésimo monte contém $a_i$ pedras. A tua tarefa é remover todas as pedras através das operações seguintes:

  • Operação um: escolher um monte e remover pelo menos $2$ pedras desse monte;
  • Operação dois: escolher um intervalo de índices consecutivos $[l,r]$, com $1\le l\le r\le n$ e $r-l\ge 2$, e remover exatamente $1$ pedra de cada monte nesse intervalo.

Podes realizar estas duas operações um número arbitrário de vezes e em qualquer ordem, até deixar de ser possível realizar operações. Se conseguires remover todas as pedras, ganhas.

Talvez já tenhas começado a calcular coisas como «quantas sequências de operações essencialmente diferentes existem», mas, ao jogares, descobriste que estás sempre a perder. Por isso, decidiste recorrer a um pequeno truque: no início do jogo, escondes $k$ pedras na mão e, antes de realizares qualquer operação, podes e tens de colocar essas pedras num ou em vários montes. Esperas que isso aumente as tuas hipóteses de ganhar, embora saibas que também pode fazer-te perder um jogo que originalmente poderias ganhar.

Agora podes escolher livremente uma configuração inicial para jogar. Mais precisamente, cada $a_i$ pode ser qualquer inteiro no intervalo $[l_i,r_i]$. Queres calcular para quantas configurações iniciais existe pelo menos uma estratégia que te permita ganhar. Como a resposta é muito grande, só precisas de apresentar o seu valor módulo $10^9+7$. Duas configurações iniciais são diferentes se e somente se existir pelo menos um $1\le i\le n$ para o qual os respetivos valores de $a_i$ sejam diferentes. Repara que «configuração inicial» se refere à configuração antes de adicionares as $k$ pedras.

Entrada

Lê os dados do ficheiro stone.in.

Este problema tem vários casos de teste. A primeira linha contém um inteiro positivo $T$, que representa o número de casos de teste. Seguem-se os casos de teste, por ordem.

Para cada caso, a primeira linha contém dois inteiros $n,k$, que representam, respetivamente, o número de montes e o número de pedras a adicionar. Seguem-se $n$ linhas, cada uma com dois inteiros não negativos $l_i,r_i$, que indicam o intervalo do número inicial de pedras em cada monte.

Saída

Escreve a saída no ficheiro stone.out.

Para cada caso de teste, apresenta uma linha com um inteiro: o número de configurações nas quais é possível ganhar, módulo $10^9+7$.

Exemplos

Entrada 1

1
4 1
0 1
0 1
0 1
0 1

Saída 1

14

Explicação do exemplo 1

Existem $2^4=16$ configurações iniciais possíveis. Pode provar-se que, exceto nas configurações $(0\ 0\ 0\ 0)$ e $(1\ 0\ 0\ 1)$, nas quais não é possível ganhar, todas as outras admitem uma estratégia vencedora. Por exemplo, na configuração inicial $(1\ 0\ 1\ 0)$, podes colocar a pedra que tens na mão no segundo monte, obtendo a configuração $(1\ 1\ 1\ 0)$, e depois aplicar uma vez a operação dois ao intervalo $[1,3]$.

Exemplo 2

Consulta os ficheiros stone/stone2.in e stone/stone2.ans no diretório dos concorrentes.

Exemplo 3

Consulta os ficheiros stone/stone3.in e stone/stone3.ans no diretório dos concorrentes.

Exemplo 4

Consulta os ficheiros stone/stone4.in e stone/stone4.ans no diretório dos concorrentes.

Restrições

Para $100\%$ dos dados, garante-se que $T\le 10$, $3\le n\le 1000$, $0\le l_i\le r_i\le 10^9$, $0\le k\le 100$.

Números dos testes $n\le$ $k\le$ Condições especiais
$1\sim 3$ $5$ $2$ $r_i\le 5$
$4\sim 5$ $1000$ $0$ $l_i=r_i$
$6\sim 8$ $1000$ $100$ $l_i=r_i$
$9\sim 11$ $1000$ $0$ Nenhuma
$12\sim 13$ $1000$ $2$ Nenhuma
$14\sim 15$ $1000$ $100$ $r_i\le 10$
$16\sim 20$ $1000$ $100$ Nenhuma

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#1306EditorialOpenkawaii rainstopqwqGotoHiotoriView

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.