Pagini recente » Cod sursa (job #2436524) | Cod sursa (job #1807889) | Cod sursa (job #1176011) | Cod sursa (job #468891) | Cod sursa (job #2289846)
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream f("abc2.in");
ofstream g("abc2.out");
#define antic 10000005
#define nrc 50005
int n,lg,rez;
char c,s[antic],cuv[nrc][21],aux[21];
void afis_test () {
for (int i=1;i<=n;++i)
g<<cuv[i]<<'\n';}
int cmp (char a[21],char b[21]) {
int lg1=strlen(a);
int lg2=strlen(b);
int i=0;
int mx=max(lg1,lg2);
for (int i=0;i<mx;++i)
if (a[i]>b[i])
return 1;
else if (a[i]<b[i])
return 0;
return -1;}
void del (int j) {
for (int k=j;k<n;++k)
strcpy(cuv[k],cuv[k+1]);
--n;}
void slave () {
f.getline(s,antic);
n=1;
while (f.getline(cuv[n],21))
++n;
--n;
for (int i=1;i<n;++i)
for (int j=i+1;j<=n;++j) {
int comp=cmp(cuv[i],cuv[j]);
if (comp) {
if (comp<0) {
del(j);
--j;}
else {
strcpy(aux,cuv[i]);
strcpy(cuv[i],cuv[j]);
strcpy(cuv[j],aux);}}}}
int cauta (char c) {
for (int i=1;i<=n;++i)
if (cuv[i][0]==c)
return i;}
bool verif (char word[21],int p) {
int lgw=strlen(word);
if (lgw+p>lg)
return 0;
for (int k=0;k<lgw;++k)
if (word[k]!=s[p+k])
return 0;
return 1;}
int main()
{ slave();
// afis_test();
lg=strlen(s);
for (int i=0;i<lg;++i) {
c=s[i];
int poz=cauta(c);
while (cuv[poz][0]==c && poz<=n) {
rez+=verif(cuv[poz],i);
++poz;}}
g<<rez<<'\n';
return 0;
}