记录编号 119602 评测结果 AAAAAAAAAA
题目名称 [NOI 2004]小H的小屋 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.025 s
提交时间 2014-09-13 11:05:34 内存使用 0.25 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
double K1,K2;
int M,N;//北M南N
double calc_rect(double x,double k){//横向x,斜率k
	return x*k*x;
}
double calc_area(int x,int v){//横向长度x,北边1个,南边v个
	if(!x) return 0;
	int r=x%v;
	double ans=0;
	ans+=calc_rect(x,K1);
	ans+=r*calc_rect(x/v+1,K2);
	ans+=(v-r)*calc_rect(x/v,K2);
	return ans;
}
int t1,t2,v1,v2;
//t1组北边一个对南边v1个,t2组北边一个对南边v2个
double calc(int x,int t,int v){//总长度x,有t组北边一个对南边v个的
	if(!x) return 0;
	int r=x%t;
	return (t-r)*calc_area(x/t,v)+r*calc_area(x/t+1,v);
}
void work(void){
	
	v1=N/M,v2=v1+1;
	t2=N%M,t1=M-t2;
	if(!t2){
		v2=v1;
		t1--,t2++;
	}
	double ans=1e9;
	for(int x=t1;x<=100-t2;x++){
		ans=min(ans,calc(x,t1,v1)+calc(100-x,t2,v2));
	}
	printf("%.1lf\n",ans);
}
int main(){
	freopen("hut.in","r",stdin);
	freopen("hut.out","w",stdout);
	scanf("%lf%lf",&K1,&K2);
	scanf("%d%d",&M,&N);
	work();
	return 0;
}