Pagini recente » Cod sursa (job #2844928) | Cod sursa (job #880460) | Cod sursa (job #2379554) | Cod sursa (job #2284362) | Cod sursa (job #1646691)
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
char text[100];
char cuvant[100];
int repetare[100];
int contor = 0;
void citire()
{
fgets(cuvant, 100, stdin);
fgets(text, 100, stdin);
text[strlen(text) - 1] = 0;
cuvant[strlen(cuvant) - 1] = 0;
}
void generareRepetare()
{
int l = strlen(cuvant);
int j = 0;
for(int i = 1; i < l; i++)
{
while(j > 0 && cuvant[j] != cuvant[i])
{
j = repetare[j - 1];
}
if(cuvant[j] == cuvant[i])
{
j++;
}
repetare[i] = j;
//printf("%d ", repetare[i]);
}
}
vector<int> solutii;
bool ok = false;
int nr = 0;
void parcurgere()
{
int l = strlen(text);
int j = 0;
for(int i = 0; i < l; i++)
{
while(true)
{
if(text[i] == cuvant[j])
{
j++;
if(j == strlen(cuvant))
{
nr++;
contor++;
if(contor <= 1000)
{
solutii.push_back(i + 1 - strlen(cuvant));
j = repetare[j - 1];
}
}
break;
}
else if(j != 0)
{
j = repetare[j - 1];
}
if(j == 0)
{
break;
}
}
}
}
void afisare()
{
printf("%d\n", nr);
if(nr > 1000)
{
nr = 1000;
}
for(int i = 0; i < nr; i++)
{
printf("%d ", solutii[i]);
}
}
int main()
{
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
citire();
generareRepetare();
parcurgere();
afisare();
return 0;
}