# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
871389 | andrei_boaca | 비스킷 담기 (IOI20_biscuits) | C++17 | 36 ms | 1568 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "biscuits.h"
#include <bits/stdc++.h>
//#include "grader.cpp"
using namespace std;
typedef long long ll;
ll f[65],ans,lg[65];
vector<ll> secv[65];
vector<ll> compress(vector<ll> a)
{
vector<ll> aux;
ll L=0;
for(auto i:a)
{
if(i<0)
L+=abs(i);
else
{
if(L!=0)
aux.push_back(-L);
aux.push_back(i);
}
}
if(L!=0)
aux.push_back(-L);
return aux;
}
vector<ll> elim(vector<ll> a, ll nr)
{
ll init=nr;
ll taken=0;
while(nr>0)
{
ll p=a.back();
ll L=-1;
if(p<0)
L=abs(p);
else
L=(1LL<<p);
if(L<=nr)
{
nr-=L;
taken+=L;
a.pop_back();
continue;
}
if(p<0)
break;
vector<ll> aux=elim(secv[p],nr);
a.pop_back();
for(auto i:aux)
a.push_back(i);
break;
}
if(taken>0)
a.push_back(-taken);
//a=compress(a);
return a;
}
long long count_tastiness(long long x, std::vector<long long> a)
{
for(int i=0;i<=60;i++)
{
f[i]=0;
lg[i]=0;
}
for(int i=0;i<a.size();i++)
f[i+1]=a[i];
lg[0]=1;
ll suma=0;
for(ll i=1;i<=60;i++)
{
lg[i]=0;
suma+=(1LL<<(i-1))*f[i];
secv[i].clear();
secv[i]={i-1,i-1};
ll maxim=suma/x;
ll dr=(1LL<<i)-1;
if(maxim<dr)
{
ll out=dr-maxim;
secv[i]=elim(secv[i],out);
}
ll mylg=0;
for(auto j:secv[i])
{
if(j>=0)
{
lg[i]+=lg[j];
mylg+=(1LL<<j);
}
else
mylg+=abs(j);
}
//assert(mylg==(1LL<<i));
}
return lg[60];
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |