Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using namespace std;
- #include <vector>
- #include <queue>
- #include <algorithm>
- #include <cmath>
- #include <utility>
- #include <bitset>
- #include <set>
- #include <string>
- #include <stack>
- #include <iomanip>
- #include <map>
- #define pb push_back
- #define pii pair<int,int>
- #define F first
- #define S second
- #define LL long long
- #define mid (LB+RB)/2
- const LL maxint64 = (1ll << 63) - 1;
- const int maxint32 = (1ll << 31) - 1;
- //iterators
- #define iter(x) x.begin(),x.end()
- #define aiter(a,n) a,a+n
- //loops
- #define REP(n) for (int ___=n;___--;)
- #define REP0(i,n) for (int i=0;i<n;++i)
- #define REP1(i,n) for (int i=1;i<=n;++i)
- #define FOR(i,b,l,k) for (int i=b;i!=l;i+=k)
- #define forEach(i,v) for (auto i:v)
- /*
- yungyao so weeeeeeeeeeeeeeeeeeeeeeeeeeak
- 8e7 so dian
- FHVirus so dian
- youou so dian
- KYW so dian
- hubert so dian
- jass so dian
- tingyu so dian
- panda so dian
- */
- //IO
- #include <iostream>
- #define theyRSOOOOOOOOODIAN ios_base::sync_with_stdio(false),cin.tie(0);
- #define endl '\n'
- //workspace
- int m;
- int hub,rub;
- inline bool check(int i,LL h,LL r,int n){
- LL k = m - i;
- if (k)
- return (k+1) * r * r * h
- + k * (k+1) * (h*2*(r*6 + k*2 + 1) + r*r*6 + r*4*(k*2+1) + k*3*(k+1)) / 12
- <= n;
- else
- return r * r * h <= n;
- }
- int dfs(int i,int hb,int rb,int nleft){
- int minAns = 1e9;
- for (int h=hb;check(i,h,rb,nleft);++h){
- for (int r=rb;check(i,h,r,nleft);++r){
- if (i == m){
- if (r*r*h == nleft)
- minAns = min(minAns,r*(r+h*2));
- }
- else{
- int dfsResult = dfs(i+1,h+1,r+1,nleft - r*r*h);
- if (dfsResult)
- minAns = min(minAns,dfsResult + r*h*2);
- }
- }
- }
- return minAns == 1e9 ? 0 : minAns;
- }
- int main(){
- theyRSOOOOOOOOODIAN
- int n;
- cin >> n >> m;
- cout << dfs(1,1,1,n);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement