Elaboreremo il testo riga per riga. Poiché le righe possono contenere spazi e qualsiasi altro carattere, leggiamo ogni riga per intero con la funzione getline. La lettura continua fino alla fine dei dati di input — il numero di righe non è noto in anticipo.
In ogni riga esaminiamo i caratteri uno dopo l'altro. Se il carattere corrente è una lettera maiuscola dell'alfabeto latino, ossia '' ≤ ≤ '', allora il suo costo è uguale a s[i] - 'A' + 1: la lettera '' ha costo , '' – , ..., '' – . Tutti gli altri caratteri (lettere minuscole, cifre, segni di punteggiatura, spazi) vengono ignorati.
Il prodotto cercato verrà accumulato nella variabile . Inizialmente poniamo res = 1. Questo sarà anche la risposta se nel testo non è presente alcuna lettera maiuscola dell'alfabeto latino.
Il prodotto dei costi diventa rapidamente enorme, perciò prenderemo il resto modulo 10^9 + 7 dopo ogni moltiplicazione.
Esempio
Nell'esempio dato sono presenti le seguenti lettere maiuscole dell'alfabeto latino:
Il costo delle lettere è indicato tra parentesi. Il prodotto di tutti i costi è uguale a
Implementazione dell'algoritmo
Definiamo il modulo rispetto al quale calcoleremo il prodotto.
#define MOD 1000000007Il prodotto cercato verrà calcolato nella variabile . Inizialmente le assegneremo il valore .
res = 1;Leggiamo il testo riga per riga fino alla fine dei dati di input.
while (getline(cin, s))
{Esaminiamo i caratteri della riga corrente .
for (i = 0; i < s.size(); i++)
{Se il carattere corrente è una lettera maiuscola dell'alfabeto latino, calcoliamo il suo costo e moltiplichiamo per modulo .
if (('A' <= s[i]) && (s[i] <= 'Z'))
{
c = s[i] - 'A' + 1;
res = (res * c) % MOD;
}
}
}Stampiamo la risposta.
cout << res << endl;