Cod sursa(job #2289846)

Utilizator sebastiannrxRichiteanu Mihai Sebastian sebastiannrx Data 25 noiembrie 2018 13:48:19
Problema Abc2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.7 kb
#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;
}