Pagini recente » Cod sursa (job #2017496) | Istoria paginii utilizator/feraru_andreea_simona_325cb | Istoria paginii runda/way_to_death/clasament | Monitorul de evaluare | Cod sursa (job #758461)
Cod sursa(job #758461)
#include <iostream>
#include <string>
#include <fstream>
#include <queue>
using namespace std;
int main(){
ifstream cinr ("strmatch.in");
ofstream cour ("strmatch.out");
string a,b;
cinr >> b;
cinr >> a;
queue<int> q;
int m=b.size(), n=a.size();
b+=' ';
int p[m+1],j,t=0,tr=0;
p[0]=0;
for(int i=1; i<m+1; i++){
j=p[i-1];
while(j>0 && b[j]!=b[i]){ j=p[j-1]; }
if(b[j]==b[i]){ j++; }
p[i]=j;
}
j=0;
for(int i=0; i<n; i++){
while(j>0 && b[j]!=a[i]){ j=p[j-1]; }
if(b[j]==a[i]){ j++; }
if(j==m){
if(q.size()<1000){ q.push(i-m+1); }
t++;
}
}
cour << t << "\n";
while(!q.empty()){
cour << q.front() << " ";
q.pop();
}
//cin.ignore(2);
cinr.close();
cour.close();
return(0);
}