Cerința
Gigel a găsit un șir de n
cifre minunate. A adormit cu ele în brațe și a visat m
numere naturale. Nedumerit, a cerut părerea vrăjitoarei Ghiocica. Acesta i-a spus:
– Gigele, ești norocos. Suma numerelor distincte visate care sunt scrise cu cifre consecutive în șirul de cifre minunate este suma pe care o vei câștiga la Loto.
Nerăbdător, Gigel vă roagă să scrieți un program care să citească cele n
cifre și cele m
numere și să determine suma pe care o va câștiga la Loto.
Date de intrare
Fișierul de intrare potrivire.in
conține pe prima linie numărul n
; a doua linie conține șirul de n
cifre. A treia linie conține numărul m
, iar a patra linie conține cele m
numere.
Date de ieșire
Fișierul de ieșire potrivire.out
va conține pe prima linie numărul S
, reprezentând suma pe care o va câștiga Gigel.
Restricții și precizări
1 ≤ n, m ≤ 100000
- pentru 50% din teste,
1 ≤ n, m ≤ 1000
- cele
m
numere visate sunt numere naturale și au cel mult cinci cifre
Exemplu
potrivire.in
10 4 5 6 2 6 0 7 1 9 7 6 456 662 2607 2607 97 975
potrivire.out
3160
Explicație
Numerele distincte visate care se pot scrie cu cifre consecutive din șir sunt: 456
, 2607
și 97
, iar suma lor este 3160
. 2607
a fost visat de două ori, dar se ia în considerare o singură dată.
#include <bits/stdc++.h> using namespace std; ifstream cin("potrivire.in"); ofstream cout("potrivire.out"); long long n , m , a[100001] , x , f[100001]; long long s; int main() { cin >> n; for(int i = 1 ; i <= n ; i++) cin >> a[i]; for(int i = 1 ; i <= n ; i++) { int num = 0; for(int j = i ; j <= i + 4 && j <= n ; j++) { num = num* 10 + a[j]; f[num]++; } } cin >> m; for(int i = 1 ; i <= m ; i++) { cin >> x; if(f[x] != 0 && f[x] != -1) s+= x; f[x] = -1; } cout << s; }