Submission #260968

#TimeUsernameProblemLanguageResultExecution timeMemory
260968user202729Bali Sculptures (APIO15_sculpture)C++17
37 / 100
1 ms512 KiB
// 4 #ifndef LOCAL #define NDEBUG 1 #endif #include<bits/stdc++.h> int main(){ std::ios::sync_with_stdio(0);std::cin.tie(0); int number, least, most; std::cin>>number>>least>>most; std::vector<int64_t> sum(number+1); for(auto [index, last]=std::pair(1,(int64_t)0); index<=number; ++index){ int value; std::cin>>value; sum[index]=last+=value; } auto const check=[&](int64_t const mask){ if(least!=1){ std::vector<std::vector<char>> f(number+1, std::vector<char>(most+1)); f[0][0]=true; for(int index=0; index<number; ++index) for(int next=index+1; next<=number; ++next) if(((~ mask)&(sum[next]-sum[index]))==0){ for(int numComponent=0; numComponent<most; ++numComponent) if(f[index][numComponent]) f[next][numComponent+1]=true; } return std::any_of(f.back().begin()+least, f.back().end(),[&](auto it){return it;}); }else{ std::vector<int> least(number+1, INT_MAX); least[0]=0; for(int index=0; index<number; ++index) if(auto const curNumber=least[index]; curNumber<most) for(int next=index+1; next<=number; ++next) if(((~ mask)&(sum[next]-sum[index]))==0){ least[next]=std::min(least[next], curNumber+1); } return least.back()<=most; } }; int const numBit=1+(63^__builtin_clzll(sum.back())); int64_t value=((int64_t)1<<numBit)-1; for(int bit=numBit; bit--;){ if(check(value-(1<<bit))) value-=1<<bit; } std::cout<<value<<'\n'; }
#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...