Submission #309885

#TimeUsernameProblemLanguageResultExecution timeMemory
309885CaroLindaPacking Biscuits (IOI20_biscuits)C++14
0 / 100
1109 ms282620 KiB
#include "biscuits.h" #include <bits/stdc++.h> #define ll long long using namespace std ; //existem bits que eu nao consigo formar de jeito nenhum //por isso que nao eh a soma de todos os outros (burra :/) //imagina o cenario 0 0 1 //eu vou retornar 9, mas na real eh 1 soh que eu consigo //se a soma eh menor que eu, eu tenho um ligado que ela nao tem //mas pode ser que, para fazer esse bit, eu impossibilite outros //preciso fazer uma dp: qual a quantidade de elementos que eu consigo fazer //dado que vou ligar o i-esimo bit? //nao consigo fugir do exponencial //vamos pensar na condicao de formacao da mask y // como eu sei se eu consigo formar o i-esimo bit (da esq pra direita) // eu tenho que ter a soma de todos os biscoitos de [0;i] menos // a soma das potencias que eu ja usei dando maior ou igual a 2^i? //eh isso mesmo??? //essa condicao eh claramente necessaria //mas sera suficiente? //suponha que isso aconteca //entao sempre consigo ir formando as potenciazinhas pra chegar no i //ok entao, eh suficiente //mas como usar essa informacao agora //talvez ajude pra 35 pontos long long count_tastiness(long long x, vector<long long> a ) { while( (int)(a.size()) < 60 ) { a.push_back(0LL) ; } ; set<ll> pos ; pos.insert(0LL) ; ll curSoma = 0LL ; for(int i = 0 ; i < 60 ; i++ ) { curSoma += a[i] * (1LL<<i) ; auto it = pos.upper_bound(curSoma - x*(1LL<<i) ) ; vector<ll>toAdd ; while(it != pos.begin()) { it-- ; toAdd.push_back(*it + x*(1LL<<(ll)i) ) ; } for(auto e : toAdd ) pos.insert(e) ; } return (int)(pos.size() ) ; }
#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...