Impresarul unei formaţii de muzică trebuie să
primească oferte de spectacole şi eventual anulări de spectacole din diferite
oraşe. Oraşele sunt codificate prin numerele 1,2,..,n (1
£n£20)
şi fiecare oraş poate organiza cel mult un spectacol. Impresarul ţine legătura
cu organizatorii de spectacole din aceste oraşe şi actualizează în permanenţă
datele obţinute. Prin fax el primeşte m
(m<= 100)  mesaje, care pot fi de unul
din cele două tipuri:


 

D

nr

 

sau

 

N

nr

 

Cu semnificaţiile: pentru primul mesaj se doreşte
organizarea unui concert în oraşul nr, iar pentru a-l doilea mesaj se doreşte
anularea spectacolului din oraşul nr. Un mesaj este format din exact două
linii.

 

Se cere:

a)      Să se afişeze oraşele în
care va concerta formaţia de muzică (pe aceeaşi linie cu un spaţiu între ele).


b)      Să se afişeze oraşul (sau
oraşele dacă sunt mai multe, pe aceeaşi linie cu un spaţiu între ele) în care
organizatorii sunt cei mai nedecişi (adică au anulat şi propus oraganizarea de
spectacol în oraşul lor de cele mai multe ori).


c)      Să se afişeze numărul de
oraşe care nu au trimis nici un mesaj impresarului.


 

Exemplu:

Pentru datele de intrare:

n=5

m=6

D

2

D

3

N

3

D

3

D

5

N

2

Se va afişa:

a)

3 5

b)

3

c)

2

Răspuns :

#include <fstream>
using namespace std;
char o[20]; //inițializat cu 0 dacă e global; char ocupă 1 octet dar e tot un int
short c[20]; //short ocupă 2 octeți și e tot int
int main()
{
short i, m2, n, cmax=0;
char m1;
ifstream f("impresar.in");
ofstream g("impresar.out");
cin>>n>>i;
while(i>0)
{
cin>>m1>>m2;
if(m1=='D') o[m2]=1;
if(m1=='N') o[m2]=0;
if(m1=='D'||m1=='N') c[m2]++; //condiționarea are grijă ca la intrare invalidă să nu facă nimic
i--;
} //deja avem structura orașelor cu da/nu, dar și de câte ori s-a răzgândit fiecare.
for(i=0;i<n;i++) if(o[i]==1) g<<i<<' ';
g<<endl; //am terminat cu a)
for(i=0;i<n;i++) if(c[i]>cmax)cmax=c;
for(i=0;i<n;i++) if(c[i]==cmax)g<<i<<' ';
g<<endl; //am terminat cu b)
cmax=0; //refolosit pentru a număra
for(i=0;i<n;i++) if(c[i]==0)cmax++;
g<<cmax<<endl; //am terminat și cu c)
f.close(); g.close(); return 0; //curățenie pentru fișiere; return 0 e mai curat decât fără un return :))
}