# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1207633 | simona1230 | Packing Biscuits (IOI20_biscuits) | C++20 | 0 ms | 0 KiB |
#include "biscuits.h"
#include <bits/stdc++.h>
using namespace std;
vector<long long> v;
long long p[128],h[64];
long long ans;
long long nd;
long long pw[128][128];
void dfs(int i,long long x)
{
ans++;
vector<long long> y(128);
if(i!=-1)y[i]=x;
for(int k=i+1; k<=120; k++)
{
if(k)y[k]=y[k-1]/2;
y[k]+=pw[k][k];
}
//cout<<i<<" ? "<<x<<endl;
for(int j=i+1; j<=120; j++)
{
if(y[j]>=nd)
{
//cout<<i<<" "<<x<<" "<<j<<" "<<y<<endl;
dfs(j,y[j]-nd);
}
}
//cout<<i<<" ! "<<x<<endl;
}
long long count_tastiness(long long x, std::vector<long long> a)
{
/*cout<<"in"<<endl;
cout<<x<<endl;
for(int i=0;i<a.size();i++)
cout<<a[i]<<" ";
cout<<endl;*/
nd=x;
ans=0;
p[0]=1;
for(long long i=1; i<=125; i++)
{
if(1e18/p[i-1]<2)p[i]=1e18+1;
else p[i]=p[i-1]*2;
//cout<<p[i]<<endl;
}
for(int j=0; j<=120; j++)
{
pw[j][j]=0;
if(j<a.size())
{
pw[j][j]=a[j];
//cout<<j<<" "<<j<<" "<<pw[j][j]<<endl;
}
for(int i=j-1; i>=0; i--)
{
pw[i][j]=pw[i+1][j];
if(i<a.size())
{
pw[i][j]+=a[i]/p[j-i];
//cout<<i<<" "<<j<<" "<<pw[i][j]<<endl;
}
}
}
dfs(-1,0);
//cout<<ans<<endl;
////////////////////
/*long long sum=0;
for(long long i=0;i<a.size();i++)
sum+=a[i]*p[i];
//cout<<sum/x<<endl;
long long ans1=1;
for(long long g=1;g<=sum/x;g++)
{
for(long long i=0;i<a.size();i++)
h[i]=a[i];
long long maxx=0,num=0;
while(num<x)
{
long long curr=g;
for(long long i=a.size()-1;i>=0;i--)
{
long long need=min(h[i],curr/p[i]);
h[i]-=need;
curr-=need*p[i];
}
if(curr!=0)break;
num++;
}
if(num==x)ans1++;
}
if(ans1!=ans)
{
cout<<x<<endl;
for(int i=0;i<a.size();i++)
cout<<a[i]<<" ";
cout<<endl;
exit(0);
}*/
return ans;
}
vector<long long> b(10);
void gen()
{
int k=5;
int x=rand()%5+2;
for(int i=0; i<k; i++)
b[i]=rand()%100;
cout<<count_tastiness(x,b)<<endl;
}
int main()
{
while(1)
{
gen();
}
}