Submission #1292748

#TimeUsernameProblemLanguageResultExecution timeMemory
1292748lambd47비스킷 담기 (IOI20_biscuits)C++20
9 / 100
1 ms580 KiB
#include<bits/stdc++.h> #include "biscuits.h" using namespace std; #define L(i,j,k) for(int i=(j);i<=(k);i++) #define R(i,j,k) for(int i=(j);i>=(k);i--) #define sz(v) ((int)(v).size()) #define all(v) (v).begin(),(v).end() #define ll long long long long count_tastiness(long long x, std::vector<long long> vec) { int z=sz(vec); L(i,0,sz(vec)-1){ if(i==sz(vec)-1 && vec[i]!=0)vec.push_back(0); if(vec[i]>x){ int a=vec[i]-x; vec[i]-=(a/2)*2; vec[i+1]+=(a/2); } //if(vec[i]==x+1)vec[i]--; } //for(auto a:vec)cout<<a<<" "; int k=sz(vec); vector<ll> preresp(k);//calculo //alias, transformo o cara em 1 e depois pego ele //so pucho nos caras que sei que vou conseguir ganhar auto dp=[&](auto&& self,int id, ll val)->ll{// dado que to decidindo oq fazer no id e com o valor val nele, quantos numeros da if(id==0){ if(val>=x)return (ll)2; else return (ll)1; } if(val>=x){ return 2*preresp[id-1];//ativo e nao ativo } //testo pra ver se consigo transformar em 1 ll quero=x-val; R(i,id-1,0){ if(quero>2*x)continue;//pra nao estourar esse bicho quero*=2; if(quero<=vec[i]){ return preresp[id-1]+self(self,i,vec[i]-quero);//nao ativo e ativo } quero-=vec[i]; } //ahhh nao vou conseguir ativar return preresp[id-1]; }; L(i,0,k-1){ preresp[i]=dp(dp,i,vec[i]); //cout<<preresp[i]<<" "; } return preresp[k-1]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...