treinr

Time limit: 0.03s Memory limit: 2MB Input: Output:

Enunţ

Se consideră un triplet (x,y,z)(x, y, z) unde x,y,z{1,2,...,n}x, y, z \in \{1, 2, ..., n\}.
Pentru a afla tripletul, putem pune întrebări de forma:
ask(a, b, c)
cu semnificaţia: "Este tripletul (x,y,z)(x, y, z) egal cu tripletul (a,b,c)(a, b, c)?" (unde a,b,c{1,2,...,n}a, b, c \in \{1, 2, ..., n\}).
Răspunsul la o astfel de întrebare este 11 dacă cel puţin două valori din mulţimea {xa,yb,zc}\{x - a, y - b, z - c\} sunt nule, respectiv 00 în caz contrar.

Cerință

Determinaţi tripletul (x,y,z)(x, y, z) fără a depăşi un număr maxim de întrebări specificat.

Protocol de interacţiune

Programul vostru nu va citi şi nu va scrie nici un fişier. În schimb, va trebui să implementeze funcția

std::vector<int> solve(int n, int m);

ce va primi ca parametrii nn - cu semnficația de mai sus și mm - numărul maxim de interogări permise. Funcția va returna un vector ce conține tripletul căutat. În interiorul funcției puteți apela funcția

int ask(int a, int b, int c);

Restricții și precizări

  • Funcția va fi apelată de maxim 5 ori în cadrul unui test.
  • 1n5001 \leq n \leq 500
  • Numărul maxim de interogări mm este O(n2)O(n^2), cu o constantă subunitară.
  • Ordinea valorilor în triplet contează ((1,1,2)(1,2,1))((1,1,2) \neq (1,2,1)).
  • Trebuie să includeți fișierul treinr.h

Punctaj

Punctajul pentru un test va fi zero dacǎ:

  • se depǎşeşte timpul de rulare
  • nu se respectǎ protocolul de interacțiune
  • rǎspunsul este incorect pentru cel puţin un set de date
  • se depǎşeşte numǎrul maxim de întrebări permise mm.

Log in or sign up to be able to send submissions!