1 solutions

  • 6
    @ 2024-12-21 15:54:43
    #include<bits/stdc++.h>
    using namespace std;
    int N,M,area,marea=1e9;
    void dfs(int v,int m,int r,int h){
    	if((m*(m-1)/2)*(m*(m-1)/2)>v||r<m||h<m)return;
    	if(m==0){
    		if(v==0)marea=min(marea,area);
    		return;
    	}
    	for(int rr=r;rr>=m;rr--){
    		if(m==M)area=rr*rr;
    		for(int hh=h;hh>=m;hh--){
    			int t=0;
    			for(int i=0;i<m;i++)t+=(r-i)*(r-i)*(h-i);
    			if(t<v)break;
    			area+=2*rr*hh;
    			if(area>=marea){area-=2*rr*hh;continue;}
    			dfs(v-rr*rr*hh,m-1,rr-1,hh-1);
    			area-=2*rr*hh;
    		}
    	}
    }
    int main(){
    	cin>>N>>M;
    	dfs(N,M,sqrt((N-(M*(M-1)/2)*(M*(M-1)/2))/M),(N-(M*(M-1)/2)*(M*(M-1)/2))/M/M);
    	if(marea==1e9)cout<<0;
    	else cout<<marea;
     	return 0;
    }
    
    
    • 1

    Information

    ID
    20
    Time
    1000ms
    Memory
    512MiB
    Difficulty
    9
    Tags
    # Submissions
    89
    Accepted
    10
    Uploaded By