Domnul Eboda dorește să se angajeze la firma Adobe. La interviu el primește următoarea problemă.
Cerința
Se dă un șir de caractere format din litere și caracterele *
, +
și -
. Domnul Eboda trebuie să determine câte subsecvențe de lungime 5
sunt anagrame ale cuvântului ADOBE
. Regulile suplimentare sunt că nu se face distincție între literele mari și cele mici și în plus, caracterul +
poate suplini oricare consoană, caracterul -
suplinește orice vocală, iar *
suplinește orice literă. Cu aceste reguli putem spune că următoarele secvențe de cinci caractere sunt anagrame ale cuvântului adobe
: aeobd
, dBoAE
, db---
, Ae-++
, *****
, ++---
, ad*-+
.
Date de intrare
Programul citește de la tastatură șirul de caractere.
Date de ieșire
Programul va afișa pe ecran un singur număr natural reprezentând numărul de subsecvențe de lungime 5
care sunt anagrame ale cuvântului ADOBE
.
Restricții și precizări
- Șirul va avea cel mult
100 000
de caractere și nu conține alte caractere în afara celor precizate în enunț.
Exemplu
Intrare
ebodaE+m***++
Ieșire
4
Explicație
Cele patru subsecvențe sunt: eboda
, bodaE
, odaE+
și ***++
.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema adobe:
#include <bits/stdc++.h>
using namespace std;
string S;
int A,D,O,B,E,V,C,J,n,L,R,sol;
inline void proces(char);
inline void unproces(char);
inline int analiza(int,int,int,int,int,int,int,int);
int main()
{
cin>>S;
n=S.size();
if(n<5)
{
cout<<"0\n";
return 0;
}
for(R=0;R<5;R++)
proces(S[R]);
for(R=4;;)
{
sol+=analiza(A,D,O,B,E,V,C,J);
R++;
if(R==n)break;
proces(S[R]);
unproces(S[L]);
L++;
}
cout<<sol;
return 0;
}
inline void proces(char c)
{
if(c=='a'||c=='A'){A++;return;}
if(c=='d'||c=='D'){D++;return;}
if(c=='o'||c=='O'){O++;return;}
if(c=='b'||c=='B'){B++;return;}
if(c=='e'||c=='E'){E++;return;}
if(c=='-'){V++;return;}
if(c=='+'){C++;return;}
if(c=='*'){J++;return;}
}
inline void unproces(char c)
{
if(c=='a'||c=='A'){A--;return;}
if(c=='d'||c=='D'){D--;return;}
if(c=='o'||c=='O'){O--;return;}
if(c=='b'||c=='B'){B--;return;}
if(c=='e'||c=='E'){E--;return;}
if(c=='-'){V--;return;}
if(c=='+'){C--;return;}
if(c=='*'){J--;return;}
}
inline int analiza(int a,int d,int o,int b,int e,int v,int c,int j)
{
if(a+v+j==0)return 0;if(a)a--;else if(v)v--;else j--;
if(o+v+j==0)return 0;if(o)o--;else if(v)v--;else j--;
if(e+v+j==0)return 0;if(e)e--;else if(v)v--;else j--;
if(b+c+j==0)return 0;if(b)b--;else if(c)c--;else j--;
if(d+c+j==0)return 0;if(d)d--;else if(c)c--;else j--;
return 1;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2246 adobe
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2246 adobe de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!