Cod sursa(job #1981741)

Utilizator Bodo171Bogdan Pop Bodo171 Data 16 mai 2017 17:28:05
Problema Potrivirea sirurilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string str;
char s[4000005];
int z[4000005];
int i,j,k,l,r,ans[1005],len,lenmx;
int main()
{
    ifstream f("strmatch.in");
    ofstream g("strmatch.out");
    f>>str;len=str.size();
    for(i=0;i<str.size();i++)
    {
        s[i]=str[i];
    }
    f>>str;
    for(i=0;i<str.size();i++)
    {
        s[len+i]=str[i];
    }
    lenmx=len+str.size();
    for(i=1;i<lenmx;i++)
    {
        if(i>r) j=0;
        else j=min(z[i-l],r-i);
        while(i+j<lenmx&&s[i+j]==s[j])
          j++;
        j--;
        z[i]=j;
        if(i+j>r)
            l=i,r=i+j;
        if(j>=len-1&&i>=len)
        {
            k++;
            if(k<=1000)
                ans[k]=i-len;
        }
    }
    g<<k<<'\n';
    for(i=1;i<=min(1000,k);i++)
        g<<ans[i]<<' ';
    return 0;
}