Pagini recente » baaaba | Cod sursa (job #1699542) | Cod sursa (job #95151) | Cod sursa (job #1580157) | Cod sursa (job #2097622)
#include <fstream>
using namespace std;
ifstream cin("decodare.in");
ofstream cout("decodare.out");
const int NMAX=1000;
int n,k,d,m;
long long dp[NMAX+5][NMAX+5],sum[NMAX+5];
long long c;
int CAUTARE_BINARA(int strat,long long val)
{
for(int j=1;j<=n;j++)
sum[j]=sum[j-1]+dp[strat][j];
int r=d*(strat-1)+1,pas=1<<9;
while(pas)
{
if(r+pas<=n-d*(k-strat) and sum[r+pas]<val)
{
r+=pas;
}
pas/=2;
}
return r;
}
int main()
{
cin>>n>>k>>d>>m;
for(int j=1;j<=n;j++)
{
dp[1][j]=1;
sum[j]=sum[j-1]+dp[1][j];
}
for(int i=2;i<=k;i++)
{
for(int j=d;j<=n;j++)
dp[i][j]=sum[j-d];
for(int j=1;j<=n;j++)
sum[j]=sum[j-1]+dp[i][j];
}
for(int i=1;i<=k;i++)
for(int j=1;j<=n;j++)
cout<<i<<" "<<j<<" : "<<dp[i][j]<<"\n";
for(int i=1;i<=m;i++)
{
cin>>c;
int X;
X=CAUTARE_BINARA(1,c);
cout<<n-X<<"\n";
}
return 0;
}
/**
1 1 :: 1
1 2 :: 1
1 3 :: 1
1 4 :: 0
1 5 :: 0
1 6 :: 0
1 7 :: 0
2 1 :: 0
2 2 :: 0
2 3 :: 1
2 4 :: 2
2 5 :: 3
2 6 :: 0
2 7 :: 0
3 1 :: 0
3 2 :: 0
3 3 :: 0
3 4 :: 0
3 5 :: 1
3 6 :: 3
3 7 :: 6
**/