Cod sursa(job #2673190)

Utilizator RadianElevenAdrian Ariotn RadianEleven Data 16 noiembrie 2020 11:00:27
Problema Potrivirea sirurilor Scor 18
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f ("strmatch.in");
ofstream g ("strmatch.out");
string s, ss;
int rrr=0;
int rr[1001];
map<char, int> skip;
int main()
{
    f>>s;
    f>>ss;
    for(int i=0;i<s.size();++i){
        skip[s.at(i)] = 1e9;
    }
    int w=s.size()-1;
    for(int i=s.size()-1;i>=0;--i){
        skip[s.at(i)] = min(w-i, skip[s.at(i)]);
    }
    int j=0;
    j=s.size()-1;
    while(j<ss.size()){
        int r=s.size()-1;
        cout<<"\n";
        for(int e=0;e<j-s.size()+1;++e){
            cout<<" ";
        }
        for(int e=0;e<s.size();++e){
            cout<<skip[s.at(e)];
        }
        cout<<"\n";
        for(int e=0;e<j-s.size()+1;++e){
            cout<<" ";
        }
        cout<<s;
        cout<<"\n"<<ss<<"\n\n";
        while(r>=0 && j>=0 && s.at(r)==ss.at(j)  ){
            j--;
            r--;
            cout<<r;
        }
        if(r==-1){
            rrr++;
            rr[rrr]=j+1;
            j+=s.size()+1-r-1;
        } else {
            if(s.at(r)!=ss.at(j)){
                if(skip[ss.at(j)]){
                    j+=skip[ss.at(j)];
                } else {
                    j+=s.size();
                }
            }
        }
        if(rrr>=1001){
            break;
        }


    }
    g<<rrr<<"\n";
    for(int i=1;i<=min(rrr,1000) ;++i){
        g<<rr[i]<<" ";
    }
    return 0;
}