Pagini recente » Cod sursa (job #637212) | Istoria paginii runda/very-long_olimp | Cod sursa (job #1266850) | Cod sursa (job #83972) | Cod sursa (job #255950)
Cod sursa(job #255950)
#include<fstream>
#include<string>
using namespace std;
#define xxx 2000001
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
char a[xxx],b[xxx],c;
int lunga,lungb,n,poz[1001],vals,valc,li;
int verif(int k)
{
int i;
for(i=0;i<lunga;i++)
if(a[i]!=b[i+k])
return 0;
return 1;
}
int main()
{
fin.get(a,xxx);fin.get();
fin.get(b,xxx);
lunga=strlen(a);
lungb=strlen(b);
int i;
if(lunga==lungb)
{
if(verif(0))
fout<<"1\n0\n";
else
fout<<"0\n";
}
if(lunga>lungb)
fout<<"0\n";
if(lunga<lungb)
{
for(i=0;i<lunga;i++)
{
c=a[i];
valc+=c;
c=b[i];
vals+=c;
}
if(valc==vals)
if(verif(0))
n++,poz[n]=0;
for(li=0,i=lunga;i<lungb;li++,i++)
{
c=b[li];
vals-=c;
c=b[i];
vals+=c;
if(vals==valc)
if(verif(li+1))
n++,(n>1000 ? :poz[n]=li+1);
}
fout<<n<<'\n';
if(n>1000)
n=1000;
for(i=1;i<=n;i++)
fout<<poz[i]<<' ';
fout<<'\n';
}
fout.close();
return 0;
}