Krótki limit wykonanie programu.

0

Twoim zadaniem jest napisanie programu, który stwierdzi, czy drugi z podanych zbiorów znaków jest kombinacją z powtórzeniami uzyskaną z pierwszego podanego zbioru znaków i jeśli tak nie jest, poda informację, o ile elementów należy uzupełnić pierwszy zbiór, by ten warunek został spełniony.

Dwa wejścia:

  1. Zawierający nie więcej niż 100 znaków (każdy ze znaków występuje jednokrotnie)
  2. drugi, zawierający nie więcej niż 10000000 znaków

Wyjście:
Jeden wiersz zawierający cyfrę 0 (zero), jeśli zbiór określony drugą linią danych wejściowych jest kombinacją z powtórzeniami uzyskaną z pierwszego zbioru
liczbę całkowitą wskazującą ile elementów należy dodać do zbioru zdefiniowanego w pierwszej linii danych, aby spełnienie powyższego warunku było możliwe.

Przykład
Wejście:
abcd

aabbccadadcdcdbbaaccbb

Wyjście:
0

Wejście:
ab

aabbccadadcdcdbbaaccbb

Wyjście:
2

I ten limit czasowy to 0.200s.

Macie może jakieś propozycje na wykonanie? :) Pozdrawiam.

1

Musisz zliczyć jakie różne znaki występują w każdym z tych zbiorów (wystarczy tablica 256 booli (może mniejsza)(lub set, tak jak podał dragon)). Potem porównujesz zawartości tych tablic i jeśli w drugiej jest znak, którego nie ma w pierwszej to znaczy, że trzeba dodać jeden znak do pierwszego zbioru.

0
int tb[256]={0},show=0;
char ch;
while((ch=cin.get())!='\n') tb[(unsigned char)ch]=1;
while((ch=cin.get())!='\n') if(!(tb[(unsigned char)ch]++)) ++show;
cout<<show<<endl;
0
if(!(tb[(unsigned char)ch]++))

Możesz mi powiedzieć do czego służą te plusy? kompletnie nie mam pojęcia, a chcę napisać podobny kod :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1