Abbey Road

Time limit: 0.5s Memory limit: 256MB Input: Output:

Cerință

C. este proprietara cafenelei Abbey Road de pe strada cu același nume din Londra. Deasupra intrării în Abbey Road se află un semn cu NN becuri galbene, care pot fi aprinse sau stinse, numerotate de la 00 la N1N - 1. Pentru simplitate, în continuare vom reprezenta stările becurilor printr-un șir binar SS, unde S[i]S[i] descrie starea celui de-al ii-lea bec: 00 dacă e stins și 11 dacă e aprins.

Definim un fragment al semnului drept o subsecvență maximală a sa în care toate becurile au aceeași stare. De exemplu, șirul de becuri 111100111011111100111011 se împarte în fragmente astfel: 1111001110111111|00|111|0|11.

C. e de părere că becurile trebuie să aibă o configurație cu număr maxim de fragmente, deoarece ar atrage mai mulți clienți. Starea unui bec se poate modifica apăsând un buton aflat în spatele său.

Din păcate, C. este cam scundă și nu ajunge la butoane. Singura metodă prin care ea poate apăsa pe butoane este cu ajutorul unui băț bifurcat, cu care poate doar să apese, simultan, pe butoanele ii și i+1i+1, unde 0iN20 \leq i \leq N ‑ 2.
C. nu își dă seama cum să apese pe butoane ca să obțină o configurație cu număr maxim de fragmente a becurilor, așa că vă cere ajutorul.

Pentru a obține puncte pentru un test, este nevoie ca șirul să conțină cel puțin N2\lfloor \frac{N}{2} \rfloor fragmente. Dacă șirul nu conține numărul maxim de fragmente, veți primi un punctaj între 30 și 70 de puncte, în funcție de cât de departe sunteți de numărul maxim de fragmente care se pot obține pe acel test.

Date de intrare

Pe prima linie din input se găsește numărul TT - numărul de scenarii care trebuie rezolvate. Pentru fiecare dintre aceste scenarii, formatul de intrare este următorul:

Pe prima linie se găsește numărul NN. Pe a doua linie se găsește șirul SS.

Date de ieșire

Pentru fiecare dintre cele TT teste, formatul de ieșire este următorul:

Pe prima linie se va afișa MM (0MN0 \leq M \leq N) - numărul de operații necesare. Pe a doua linie se vor afișa MM numere din intervalul [0,N2][0, N - 2], reprezentând indicele ii pentru fiecare operație.

Scorul unui fișier de test se va considera minimul dintre scorurile celor TT test din el. Dacă notăm cu xx numărul de fragmente din soluția concurentului și cu yy numărul de fragmente maxim care se poate obține, formula pentru scor este următoarea:

scor={100,daca˘ x=y,30+40xy,daca˘ xN2 și x<y,0,daca˘ x<N2.scor = \begin{cases} 100, & \text{dacă } x = y,\\[6pt] 30 + 40 \cdot \frac{x}{y}, & \text{dacă } x \ge \lfloor \frac{N}{2} \rfloor \text{ și } x < y,\\[6pt] 0, & \text{dacă } x < \lfloor \frac{N}{2} \rfloor. \end{cases}

Dacă există mai multe soluții, se poate afișa oricare.

Restricții și precizări

  • 2N1062 \leq N \leq 10^6;
  • Suma valorilor lui NN pe fiecare test nu va depăși 10610^6;
  • Pentru teste în valoare de 1515 puncte, S0=S1==SN1S_0 = S_1 = \dots = S_{N - 1};
  • Pentru teste în valoare de alte 1414 puncte, N2N \leq 2;
  • Pentru teste în valoare de alte 2525 puncte, N15N \leq 15;
  • Pentru teste în valoare de alte 1717 puncte, N26N \leq 2^6;

Exemplul 1

stdin

2
4
0101
4
0000

stdout

0
2
0 1

Explicație

Pentru primul șir, avem deja numărul maxim de fragmente pe care îl putem obține.

Pentru cel de al doilea șir, aplicăm operația pe poziția 11, șirul devenind 11001100. Aplicăm din nou operația pe poziția 11, șirul devenind 10101010. Aceset șir are număr maxim de fragmente.

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