Pagini recente » Cod sursa (job #2941726) | Cod sursa (job #110688) | Cod sursa (job #9230) | Cod sursa (job #1754119) | Cod sursa (job #2292037)
#include <fstream>
#include <cstring>
#include <vector>
#define MOD 10003
using namespace std;
ifstream f("abc2.in");
ofstream g("abc2.out");
char s1[10000005], s2[25];
int N, M, i ,j, sol;
long long cod, p;
vector <int> Map[MOD];
inline bool isThere(long long x) {
int key = x % MOD;
for (int i = 0; i < Map[key].size(); ++i)
if ( Map[key][i] == x ) return 1;
return 0;
}
inline void Push(long long x) {
if (! isThere(x)) {
int key = x % MOD;
Map[key].push_back(x);
}
}
int main() {
f.getline(s1, 10000003);
f.getline(s2, 23);
N = strlen(s1);
M = strlen(s2);
cod = 0;
for (i = 0; i < M; ++i) {
cod = cod * 3 + (s2[i] - 'a') ;
}
Push(cod) ;
while (f.getline(s2, 23)) {
cod = 0;
for (i = 0; i < M; ++i) {
cod = cod * 3 + (s2[i] - 'a');
}
Push(cod);
}
cod = 0;
p = 1;
for (i = 0; i < M; ++i) {
cod = cod * 3 + (s1[i] - 'a');
p = p * 3;
}
if (isThere(cod)) ++sol;
p /= 3;
for (i = M; i < N; ++i) {
cod = (1LL * cod - (s1[i - M] - 'a' ) * p ) * 3 + (s1[i] - 'a');
if ( isThere(cod)) ++sol;
}
g << sol;
return 0;
}