2016sdau课程练习专题二 1003
2016-04-18 12:26
453 查看
1.题目编号
1003
2.简单题意
题目要求给出n个蛋糕的半径,还有总共m+1个人,要求每个人分的蛋糕必须是完整的一块,并且不能进行拼接,求最大的蛋糕
3.思路
由题意知不能进行拼接,所以可以在最大的和最小的中间范围进行二分算法,由此可以取出最大部分,还是二分算法
4.感想
二分的又一例题,虽然题目长了挺多,但还是二分算法的应用
5.代码
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const double pi=acos(-1.0);
double a[10005];
int n,m;
int check(double mid)
{
int i;
int sum=0;
for(i=0;i<n;i++)
{
sum+=int(a[i]/mid);
if(sum>=m)
return 1;
}
return 0;
}
int cmp(double a,double b)
{
return a>b;
}
int main()
{
int T,i,j;
double l,r,s;
cin>>T;
while(T--)
{
cin>>n>>m;
m++;
for(i=0;i<n;i++)
{
cin>>a[i];
a[i]=a[i]*a[i]*pi;
}
sort(a,a+n,cmp);
l=0;
r=a[0];
if(m<n)
n=m;
while(r-l>1e-5)
{
s=(r+l)/2;
if(check(s))
l=s;
else
r=s;
}
printf("%.4lf\n",l);
}
return 0;
}
1003
2.简单题意
题目要求给出n个蛋糕的半径,还有总共m+1个人,要求每个人分的蛋糕必须是完整的一块,并且不能进行拼接,求最大的蛋糕
3.思路
由题意知不能进行拼接,所以可以在最大的和最小的中间范围进行二分算法,由此可以取出最大部分,还是二分算法
4.感想
二分的又一例题,虽然题目长了挺多,但还是二分算法的应用
5.代码
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const double pi=acos(-1.0);
double a[10005];
int n,m;
int check(double mid)
{
int i;
int sum=0;
for(i=0;i<n;i++)
{
sum+=int(a[i]/mid);
if(sum>=m)
return 1;
}
return 0;
}
int cmp(double a,double b)
{
return a>b;
}
int main()
{
int T,i,j;
double l,r,s;
cin>>T;
while(T--)
{
cin>>n>>m;
m++;
for(i=0;i<n;i++)
{
cin>>a[i];
a[i]=a[i]*a[i]*pi;
}
sort(a,a+n,cmp);
l=0;
r=a[0];
if(m<n)
n=m;
while(r-l>1e-5)
{
s=(r+l)/2;
if(check(s))
l=s;
else
r=s;
}
printf("%.4lf\n",l);
}
return 0;
}
相关文章推荐
- spring 官方下载地址
- 【Bugly干货分享】微信文件微起底Ⅰ
- 动态库和静态库
- poj 2723 Get Luffy Out 二分+2-sat
- 排序算法---直接插入排序算法
- Centos7 安装Redis和Hiredis
- 剑指offer(十四)之调整数组顺序使奇数位于偶数前面
- Scala for the Impatients---(1)Basics
- Selenium自动化测试视频教程(Java版)
- C++中Static作用和使用方法
- 简单介绍java Enumeration
- 跳过授权表登录后使用insert into创建root权限用户
- Java 7新特性总结 - Java IO
- Java 7新特性总结 - Java IO
- HyperPacer脚本录制原理及常见问题解决
- linux 常用设置
- IOS唯一标示
- 团队作业二
- cd 命令的具体使用说明
- cd 命令的具体使用说明