Cod sursa(job #2976707)

Utilizator Giurgea3000Giurgea Giurgea3000 Data 9 februarie 2023 21:20:20
Problema Potrivirea sirurilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.75 kb
#include <fstream>
#include <cstring>

using namespace std;

#define mod 10000000000007

ifstream cin("strmatch.in");
ofstream cout ("strmatch.out");

int v[2000002],j=0;
/////////////////////////////////////  /////////////
int main()
{
    char c[2000002],b[000002];
    cin>>c;
    int n=strlen(c);
    long long nra=0,p=1;
    for(int i=0;i<n;i++)
    {
        if(c[i]>='0' && c[i]<='9')
        {
            nra*=62;
            nra+=c[i]-'0';
        }
        else if(c[i]>='A' && c[i]<='Z')
        {
            nra*=62;
            nra+=c[i]-54;
        }
        else
        {
            nra*=62;
            nra+=c[i]-61;
        }
        p=p*62;
    }
 //   cout<<nra<<"\n";
    int i=0;
    long long nrb=0;
    char c1;
    while(cin>>c1)
    {
        if(c1>='0' && c1<='9')
        {
            nrb*=62;
            nrb+=c1-'0';
            b[i]=c1;
        }
        else if(c1>='A' && c1<='Z')
        {
            nrb*=62;
            nrb+=c1-54;
            b[i]=c1;
        }
        else
        {
            nrb*=62;
            nrb+=c1-61;
            b[i]=c1;
        }
        if(i>=n)
        {
            if(c1>='0' && c1<='9')
            {
                nrb-=(b[i-n]-'0')*p;
            }
            else if(c1>='A' && c1<='Z')
            {
                nrb-=(b[i-n]-54)*p;
            }
            else
            {
                nrb-=(b[i-n]-61)*p;
            }
        }
        if(nra==nrb)
        {
            j++;
            v[j]=i-n+1;
        }
        i++;
        //    cout<<c1<<" "<<nrb<<"\n";

    }
    if(j==0)
    {
        cout<<0;
    }
    else
    {
        cout<<j<<"\n";
        if(j>1000)
            j=1000;
        for(int x=1;x<=j;x++)
        {
            cout<<v[x]<<" ";
        }
    }
    return 0;
}