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
mnumere 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;
}