Pagini recente » Cod sursa (job #2878452) | Cod sursa (job #2366240) | Cod sursa (job #2520310) | Cod sursa (job #2889923) | Cod sursa (job #3220864)
#include <fstream>
#include <climits>
#include <algorithm>
#include <vector>
#include <cmath>
#include <cstring>
using namespace std;
ifstream fin ("1-sir.in");
ofstream fout("1-sir.out");
struct elem
{
int p;
int v[3];
}D[2][52003];
int n,i,j,t,S,nr1,nr2;
const int C=25000;
const int MOD=194767;
int main()
{
fin>>n>>S;
if(S>33000||S<-33000)
{
fout<<0;
return 0;
}
D[t][C].p=1;
D[t][C].v[0]=1;
D[t][C].v[1]=0;
for(i=2;i<=n;i++)
{
t=1-t;
memset(D[t],0,sizeof(D[t]));
for(j=2*C;j>=0;j--)
if(D[1-t][j].v[0])
{
nr1=D[1-t][j].v[1];
nr2=D[1-t][j].v[2];
if(j+nr1+1<=2*C)
{
D[t][j+nr1+1].p=(D[t][j+nr1+1].p+D[1-t][j].p)%MOD;
D[t][j+nr1+1].v[++D[t][j+nr1+1].v[0]]=nr1+1;
}
if(D[1-t][j].v[0]>1&&j+nr2+1<=2*C)
{
D[t][j+nr2+1].p=(D[t][j+nr2+1].p+D[1-t][j].p)%MOD;
D[t][j+nr2+1].v[++D[t][j+nr2+1].v[0]]=nr2+1;
}
if(j+nr1-1>=0)
{
D[t][j+nr1-1].p=(D[t][j+nr1-1].p+D[1-t][j].p)%MOD;
D[t][j+nr1-1].v[++D[t][j+nr1-1].v[0]]=nr1-1;
}
if(D[1-t][j].v[0]>1&&j+nr2-1>=0)
{
D[t][j+nr2-1].p=(D[t][j+nr2-1].p+D[1-t][j].p)%MOD;
D[t][j+nr2-1].v[++D[t][j+nr2-1].v[0]]=nr2-1;
}
D[1-t][j].p=0;
D[1-t][j].v[0]=0;
///fout<<j<<" "<<i<<"\n";
}
}
fout<<D[t][S+C].p%MOD;
return 0;
}