QOJ.ac

QOJ

時間限制: 20 s 記憶體限制: 512 MB 總分: 100 难度: [顯示] 互動 可 Hack ✓

#24230. Leite de dupla película

统计

Este é um problema interativo.

Neste festival repleto de aromas doces, a preparação da sobremesa que encerra a festa — o leite de dupla película — deparou-se com uma última dificuldade.

Como a sobremesa mais popular da loja, um leite de dupla película perfeito exige uma combinação perfeita entre o bolo da camada superior e o pudim da camada inferior. Neste mágico reino das pulgas, as energias dos elementos das duas camadas de sobremesa entrelaçam-se, escondidas numa complexa rede de cidades.

Os dois experientes mestres de sobremesas da loja — dacake8 e dapudding8 — decidiram pôr-te à prova. Esconderam o bolo e o pudim, respetivamente, nas estradas entre as cidades. Só consultando-os e identificando corretamente uma cidade ligada à loja principal onde te encontras (cidade $1$) por uma estrada que contém uma sobremesa poderás concluir esta sobremesa final de leite de dupla película!


Existem $n$ cidades, com uma estrada a ligar cada par de cidades. Existem $n-1$ pedaços de bolo; o $i$-ésimo está na estrada que liga as cidades $u_{i,1}$ e $v_{i,1}$. Existem $n-1$ pedaços de pudim; o $i$-ésimo está na estrada que liga as cidades $u_{i,2}$ e $v_{i,2}$. As estradas que contêm bolo e as estradas que contêm pudim formam, respetivamente, duas árvores.

Inicialmente, não conheces as posições exatas do bolo e do pudim. Podes fazer, no máximo, $\min(1000,\frac{n\times(n-1)}{2})$ consultas a dacake8 e dapudding8:

  • Consultas dacake8 e dapudding8 sobre as cidades $u$ e $v$. Inicialmente, o multiconjunto $S$ está vazio.

    • dacake8 parte da cidade $u$, segue o caminho cujas estradas contêm bolo até chegar à cidade $v$ e acrescenta a $S$ os números das cidades por onde passa.
    • dapudding8 parte da cidade $u$, segue o caminho cujas estradas contêm pudim até chegar à cidade $v$ e acrescenta a $S$ os números das cidades por onde passa.
  • A biblioteca de interação devolve o multiconjunto $S$.

Encontras-te na cidade $1$. Depois das consultas, deves indicar uma cidade $u$ tal que a estrada que liga a cidade $1$ à cidade $u$ contenha um tipo de sobremesa.

dacake8 e dapudding8 não querem dificultar-te a tarefa e garantem que as posições do bolo e do pudim já estão fixadas antes das consultas. Por outras palavras, a biblioteca de interação não é adaptativa.

Detalhes de implementação

Não precisas de implementar a função main, nem deves fazê-lo.

Deves incluir o cabeçalho milk.h no ficheiro-fonte milk.cpp e implementar as duas funções seguintes:

void init(int c, int t);
  • $c,t$ representam, respetivamente, o número da subtarefa e o número de casos de teste. $id=0$ indica que o teste é um exemplo.
  • Para cada teste, a biblioteca de interação chama esta função exatamente uma vez, quando o programa começa a executar.
int find(int c, int n);
  • $c,n$ representam, respetivamente, o número da subtarefa e o número de cidades.
  • Esta função deve devolver um inteiro positivo $u$, indicando uma cidade $u$ tal que a estrada que liga a cidade $1$ à cidade $u$ contenha um tipo de sobremesa.
  • Para cada teste, a biblioteca de interação chama esta função exatamente $t$ vezes.

Podes fazer uma consulta chamando a função seguinte:

std::vector<int>query(int u, int v);
  • $u,v$ indicam as duas cidades $u$ e $v$ fornecidas.
  • Deves garantir que $1\le u,v\le n$ e $u\ne v$.
  • Esta função devolve o multiconjunto $S$, cujo significado é descrito no enunciado.
  • Se o tamanho do multiconjunto $S$ for $m$, então $1\le S_i\le n$ e $S_0\le S_1\le \ldots \le S_{m-1}$.
  • Deves garantir que, em cada chamada da biblioteca de interação a find, esta função seja chamada, no máximo, $1000$ vezes.

Como testar o programa

Coloca milk.cpp, milk.h e o ficheiro grader.cpp dos anexos no mesmo diretório e compila com C++17:

g++ grader.cpp milk.cpp -o milk -O2 -std=c++17
./milk < ex_milk1.in

Para o executável milk obtido pela compilação:

A primeira linha da entrada da biblioteca de interação contém dois inteiros não negativos $id,t$, que representam, respetivamente, o número do teste e o número de casos de teste.

Para cada caso de teste, a primeira linha contém um inteiro positivo $n$, que representa o número de cidades. Cada uma das linhas $2\sim n$ contém dois inteiros positivos $u_{i,1}$, $v_{i,1}$; cada uma das $n-1$ linhas seguintes contém dois inteiros positivos $u_{i,2}$, $v_{i,2}$.

Se as respostas das $t$ chamadas a find estiverem todas corretas, a biblioteca de interação escreve Correct! na primeira linha e Max queries used: Q na segunda, em que $Q$ representa o maior número de chamadas a query entre todos os casos de teste. Se pelo menos uma resposta estiver errada, escreve Wrong answer.; se uma chamada à interface for inválida, também indica a causa do erro no fluxo de erro padrão.

Exemplos

Entrada 1

0 3
5
1 5
2 5
2 4
3 5
1 2
1 4
3 4
4 5
8
1 2
2 3
3 4
4 5
5 6
6 7
7 8
1 7
2 4
3 6
4 6
5 7
5 8
6 8
2
1 2
1 2

Saída 1

Correct!
Max queries used: 28

Nota

Atenção: os dados de teste finais não incluem o exemplo.

Nas figuras, uma aresta vermelha indica que a estrada entre as duas cidades contém um pedaço de bolo, e uma aresta azul indica que contém um pedaço de pudim.

Para o primeiro caso de teste, as árvores formadas pelas estradas que contêm bolo e pudim têm a seguinte forma:

Z4kq5Gdvtl.png

Para o segundo caso de teste, as árvores formadas pelas estradas que contêm bolo e pudim têm a seguinte forma:

Y5K7_-Rx0m.png

No terceiro caso de teste, uma estrada pode conter simultaneamente bolo e pudim.

Restrições

Número da subtarefa $c=$ $t=$ $n=$ Propriedade especial Pontos
$1$ $6$ $3$ Nenhuma $1$
$2$ $7875$ $5$ Nenhuma $2$
$3$ $100$ $8$ Nenhuma $3$
$4$ $1$ $10^5$ $\text{A}$ $5$
$5$ $5$ $10^5$ $\text{B}$ $5$
$6$ $10^3$ $100$ $\text{C}$ $1$
$7$ $5$ $10^5$ $\text{C}$ $5$
$8$ $10^3$ $100$ $\text{D}$ $5$
$9$ $5$ $10^5$ $\text{D}$ $15$
$10$ $10^3$ $100$ $\text{E}$ $5$
$11$ $5$ $10^5$ $\text{E}$ $15$
$12$ $10^3$ $100$ $\text{F}$ $5$
$13$ $5$ $10^5$ $\text{F}$ $15$
$14$ $10^3$ $100$ Nenhuma $15$
$15$ $5$ $10^5$ Nenhuma $3$

Propriedade especial $\text{A}$: as posições do bolo e do pudim são geradas de forma inteiramente aleatória.

Propriedade especial $\text{B}$: é garantido que existe uma única resposta possível.

Propriedade especial $\text{C}$: se ambas as árvores formadas pelas estradas que contêm bolo e pudim forem enraizadas na cidade $1$ e, em cada árvore, forem adicionadas arestas dirigidas de cada cidade para a sua cidade pai, o grafo dirigido resultante será um DAG.

Propriedade especial $\text{D}$: se ambas as árvores formadas pelas estradas que contêm bolo e pudim forem enraizadas na cidade $2$ e, em cada árvore, forem adicionadas arestas dirigidas de cada cidade para a sua cidade pai, o grafo dirigido resultante será um DAG.

Propriedade especial $\text{E}$: as posições do pudim são geradas de forma inteiramente aleatória. As posições do bolo não dependem das posições do pudim.

Propriedade especial $\text{F}$: as duas árvores formadas pelas estradas que contêm bolo e pudim são dois caminhos, ambos com a cidade $1$ numa das extremidades iniciais.

Neste problema, gerar uma árvore aleatoriamente significa utilizar uma sequência de Prufer aleatória.

Pontuação

Se a resposta devolvida por find estiver incorreta ou se os parâmetros de query forem inválidos, o multiplicador da pontuação desse teste será $0$.

Para as subtarefas $1,2,3$, se o número de consultas exceder $\frac{n\times(n-1)}{2}$, o multiplicador da pontuação desse teste será $0$; caso contrário, será $1$.

Para as subtarefas $4\sim 15$, seja $Q$ o maior número de chamadas a query entre todos os casos de teste. O multiplicador da pontuação $f(Q)$ é calculado de acordo com a tabela seguinte:

Intervalo de $Q$ $f(Q)$
$Q\le 100$ $1$
$100< Q\le 1000$ $1-\log_{20}(\frac{Q}{100})$
$Q>1000$ $0$

A pontuação final de um teste é o produto dos pontos desse teste pelo multiplicador da pontuação, com três casas decimais, de acordo com as regras de pontuação real da UOJ.

Limite de tempo: $20\ \mathrm{s}$.

Limite de memória: $512\ \mathrm{MiB}$.

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#2926EditorialOpenNew Editorial for Problem #24230nullptr_qwqView
#2920EditorialOpen【UER #14】双皮奶题解kele7View

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.