Solução Informática Iniciante - Semana 63

Solução por Leonardo Paes

Para resolver este problema, utilizaremos as ideias de: Soma de Prefixos e Soma de Sufixos.

Utilizaremos as técnicas acima para contar a quantidade de 'w's que ocorrem no prefixo e sufixo de cada posição da string s.

Tendo isso calculado, para obtermos a resposta final do problema, basta, para cada ocorrência do caractere 'o' na string s, somarmos na variável resposta = prefixo[i] \cdot sufixo[i]. (Pelo princípio multiplicativo).

Segue abaixo o código para melhor entendimento:


#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+100;
long long prefixo[maxn], sufixo[maxn];
int main(){
string s;
cin >> s;
long long resposta = 0;
for(int i=1; i<s.size(); i++){ // Precalcular quantidade de 'w's no meu prefixo.
prefixo[i]=prefixo[i-1];
if(s[i]=='v' and s[i-1]=='v'){
prefixo[i]++;
}
}
for(int i=s.size()-2; i>=0; i--){ // Precalcular quantidade de 'w's no meu sufixo.
sufixo[i]=sufixo[i+1];
if(s[i]=='v' and s[i+1]=='v'){
sufixo[i]++;
}
}
for(int i=0; i<s.size(); i++){ // Calcular a resposta.
if(s[i]=='o'){
resposta += (sufixo[i])*(prefixo[i]);
}
}
cout << resposta << endl;
return 0;
}

view raw

WOW Factor.cpp

hosted with ❤ by GitHub