Pagini recente » Cod sursa (job #1978275) | Cod sursa (job #2646601) | Rating Gusa Mihai (mihaigusa) | Cod sursa (job #2311034) | Cod sursa (job #2673188)
#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;
}
for(int i=s.size()-1;i>=0;--i){
skip[s.at(i)] = min(i, skip[s.at(i)]);
}
int j=0;
cout<<"1";
j=s.size()-1;
while(j<ss.size()){
int r=s.size()-1;
cout<<"1";
cout<<"\nj"<<j<<" r:"<<r<<" ";
while(r>=0 && j>=0 && s.at(r)==ss.at(j) ){
j--;
r--;
cout<<r;
}
cout<<"1";
if(r==-1){
cout<<"match:"<<j+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();
}
}
}
}
g<<rrr<<"\n";
for(int i=1;i<=rrr;++i){
g<<rr[i]<<" ";
}
return 0;
}