Mai intai trebuie sa te autentifici.
Cod sursa(job #1837019)
Utilizator | Data | 28 decembrie 2016 22:32:12 | |
---|---|---|---|
Problema | Abc2 | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.09 kb |
#include <iostream>
#include<bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <vector>
#define M 666013
using namespace std;
FILE *f = fopen("abc2.in", "r");
FILE *g = fopen("abc2.out", "w");
vector <int> h[M + 1];
char s[10000001], cuv[50001];
int v[25];//puterile lui 3
int caut(int x){
int y = x % M, i;
for(i = 0; i < h[y].size(); ++i){
if(h[y][i] == x) return 1;
}
return 0;
}
int main()
{
int n, n1, aux, i, nr = 0;
fgets(s, 10000000, f);
n = strlen(s);
v[0] = 1;
for(i = 1; i <= 19; i++)
v[i] = v[i - 1] * 3;
while(fgets(cuv, 50000, f)){
n1 = strlen(cuv);
aux = 0;
for(i = 0; i < n1; ++i){
aux += v[i] * (cuv[i] - 'a');
}
aux %= M;
h[aux].push_back(aux);
}
aux = 0;
for(i = 0; i < n1; ++i){
aux += v[i] * (cuv[i] - 'a');
}
nr += caut(aux);
for(i = 1; i < n1; i++){
aux /= 3;
aux += v[i-1] * (s[i] - 'a');
nr += caut(aux);
}
fprintf(g, "%d", nr);
return 0;
}