Cod sursa(job #3333271)

Utilizator Vlad3218Garcea Vlad Vlad3218 Data 12 ianuarie 2026 17:38:57
Problema Potrivirea sirurilor Scor 14
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.6 kb
#include <iostream>
#include <cstring>
#include <vector>
#include <climits>
#include <fstream>

using namespace std;

ifstream fin ("strmatch.in");
ofstream fout ("strmatch.out");
vector <int> h;
const int MOD = INT_MAX;
char A[2000001],B[2000001];
int N;
int LenA,LenB;
vector <int> res;
void Citire(){
    fin>>A>>B;
}
bool Verifica(int poz){
    char aux[2000001];
    int ind=0;
    return true;
    for (int i=poz;i<=poz+LenA-1;++i)
        aux[ind++]=B[i];
    aux[ind]='\0';
    if (strcmp(aux,A)==0)
        return true;
    return false;
}
void Rezolvare(){
    LenA=strlen(A);
    LenB=strlen(B);
    if (LenA>LenB){
        cout<<0;
        return;
    }
    long long NrA=0;
    for (int i=0;A[i];++i){
        char ch=A[i];
        NrA=(NrA*10+ch)%MOD;
    }
    long long Nr1=0;
    long long Put=1;
    for (int i=0;A[i];++i){
        char ch=B[i];
        Nr1=(Nr1*10+ch)%MOD;
        if (A[i+1])
            Put=Put*10%MOD;
    }
    h.push_back(Nr1);
    for (int i=1;i<=LenB-LenA;++i){
        char ch=B[i];
        long long Nr2=((Nr1-B[i-1]*Put)*10%MOD+B[i+LenA-1])%MOD;
        Nr1=Nr2;
        h.push_back(Nr2);
    }
    for (int i=0;i<h.size();++i){
        long long Numar=h[i];
        if (Numar!=NrA)
            continue;
        bool p=Verifica(i);
        if (N==1000)
            break;
        if (p){
            N++;
            res.push_back(i);
        }
    }
}
void Afisare(){
    fout<<N<<"\n";
    for (auto i:res)
        fout<<i<<' ';
}
int main()
{
    Citire();
    Rezolvare();
    Afisare();
    return 0;
}