Pagini recente » Cod sursa (job #3163223) | Cod sursa (job #769098) | Cod sursa (job #2404148) | Cod sursa (job #1781104) | Cod sursa (job #2127474)
#include <iostream>
#include <fstream>
#include <deque>
using namespace std;
ifstream fin("1-sir.in");
ofstream fout("1-sir.out");
int n,s,i,j,nr,rz[32900];
bool b[256][32900];
struct punct
{
int sum, ad, niv;
}p,ve;
deque <punct> c;
int main () {
fin>>n>>s;
if(s>n*(n+1)/2) fout<<0<<"\n";
else
{
rz[1]=1;
p.sum=1; p.ad=1; p.niv=2;
c.push_back(p);
while(c.front().niv<n)
{
p=c.front();
if(p.sum+p.ad+1<=s)
{
ve.ad=p.ad+1; ve.sum=p.sum+ve.ad; ve.niv=p.niv+1;
rz[ve.sum]+=rz[p.sum];
if(b[ve.niv][ve.sum]==0)
{
b[ve.niv][ve.sum]=1;
c.push_back(ve);
}
}
if(p.sum+p.ad-1>p.sum&&p.sum+p.ad-1<=s)
{
ve.ad=p.ad-1; ve.sum=p.sum+ve.ad; ve.niv=p.niv+1;
rz[ve.sum]+=rz[p.sum];
if(b[ve.niv][ve.sum]==0)
{
b[ve.niv][ve.sum]=1;
c.push_back(ve);
}
rz[p.sum]=0;
}
else if(p.ad>0&&b[p.niv+1][p.sum]==0)
{
p.niv++; p.ad=0;
b[p.niv][p.sum]=1;
c.push_back(p);
}
else rz[p.sum]=0;
c.pop_front();
}
fout<<rz[s]<<"\n";
}
}