Cod sursa(job #2404034)

Utilizator Chirac_MateiChiriac Matei Chirac_Matei Data 12 aprilie 2019 11:18:40
Problema Potrivirea sirurilor Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <fstream>
#include <cstring>
#include <vector>
#define mod 1000000007

using namespace std;
ifstream fin ("strmatch.in");
ofstream fout ("strmatch.out");
char s[2000005],gs[2000005];
long sum,sumtg,n,m,i,j,nr;
bool ok;
vector <int> ans;
int main()
{
    fin>>gs;
    fin>>s;
    n=strlen(s);
    m=strlen(gs);
    for(i=0;i<m;i++)
    {
        sumtg+=gs[i];
        sumtg%=mod;
    }
    for(i=0;i<n-m+1;i++)
    {
        if(i==0)
        {
            for(j=0;j<m;j++)
            {
                sum+=s[j];
                sum%=mod;
            }
        }
        else
        {
            sum+=s[i+m-1];
            sum-=s[i-1];
            sum%=mod;
        }
        if(sum==sumtg)
        {
            ok=true;
            for(j=i;j<=i+m-1;j++)
            {
                if(s[j]!=gs[j-i])
                {
                    ok=false;
                    break;
                }
            }
            if(ok==true)
            {
                nr++;
                ans.push_back(i);
            }
        }
    }
    if(n>1000)
    {
        fout<<nr<<'\n';
        i=0;
        for(auto par : ans)
        {
            i++;
            fout<<par<<' ';
            if(i==1000)
                break;
        }
        return 0;
    }
    fout<<nr<<'\n';
    for(auto par : ans)
        fout<<par<<' ';
    return 0;
}