이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "biscuits.h"
#include <bits/stdc++.h>
#define all(x) x.begin(),x.end()
#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) ; } ;
vector<ll> pos(1,0LL) ;
ll curSoma = 0LL ;
for(int i = 0 ; i < 20 ; i++ )
{
curSoma += a[i] * (1LL<<i) ;
int idx = upper_bound(all(pos), curSoma - x*(1LL<<i) ) - pos.begin() - 1 ;
for(int j = 0 ; j <= idx ; j++ )
pos.push_back( pos[j] + x*(1LL<<i) ) ;
}
return (int)(pos.size() ) ;
}
# | 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... |