Pagini recente » Cod sursa (job #2697211) | Cod sursa (job #1838991) | Clasament Teme ACM Unibuc 2013 | Cod sursa (job #1203944) | Cod sursa (job #2673190)
#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;
}