算法训练 Balloons in a Box (枚举,模拟)
接下来是模拟的方案。假设你已知一个长方体的盒子和一个点集。每一个点代表一个可以放置气球的位置。在一个点上放置一个气球,就是以这个点为球心,然后让这个球膨胀,直到触及盒子的边缘或者一个之前已经被放置好的气球。你不能使用一个在盒子外面或者在一个之前已经放置好的气球里面的点。但是,你可以按你喜欢的任意顺序使用这些点,而且你不需要每个点都用。你的目标是按照某种顺序在盒子里放置气球,使得气球占据的总体积最大。
你要做的是计算盒子里没被气球占据的体积。
0 0 0
10 10 10
3 3 3
7 7 7
对于20%的数据:n=1
对于50%的数据:1≤n≤3
对于100%的数据:1≤n≤6
这道题主要学习了几何模拟方面的知识
另外还学习了STL库中的next-permutation函数
这个函数主要是求全排列用的
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring> using namespace std;
const int maxn = ;
const double inf = 0x7ffffff;
const double pi = acos(-1.0); struct point
{
double x,y,z;
double r;
}a[maxn], s, e; //s和e是关于长方体的两个对点,a[]是关于长方体内的气球的位置
int n;
double ans;
double dis(point p1, point p2)
{
double tmp1 = (p1.x - p2.x)*(p1.x - p2.x);
double tmp2 = (p1.y - p2.y)*(p1.y - p2.y);
double tmp3 = (p1.z - p2.z)*(p1.z - p2.z);
return sqrt(tmp1+tmp2+tmp3);
} double solve(int i) //球心位置到长方体侧面的最短距离
{
double t1 = min(fabs(a[i].x - e.x), fabs(a[i].x - s.x));
double t2 = min(fabs(a[i].y - e.y), fabs(a[i].y - s.y));
double t3 = min(fabs(a[i].z - e.z), fabs(a[i].z - s.z));
double r = min(t1, t2);
r = min(r, t3);
return r;
} double area(double r) //求的面积
{
return 4.0*r*r*r*pi/3.0;
} int main()
{
while(~scanf("%d", &n))
{
scanf("%lf %lf %lf", &s.x, &s.y, &s.z);
scanf("%lf %lf %lf", &e.x, &e.y, &e.z);
double total = fabs((s.x - e.x)*(s.y - e.y)*(s.z - e.z));
memset(a, , sizeof(a));
for(int i = ; i < n; i++)
scanf("%lf %lf %lf", &a[i].x, &a[i].y, &a[i].z);
double ans = ;
int vis[maxn];
for(int i = ; i < n; i++)
vis[i] = i; do
{
for(int i = ; i < n; i++)
a[i].r = ;
double tmp = ;
for(int i = ; i < n; i++)
{
a[vis[i]].r = solve(vis[i]);
for(int j = ; j < n; j++)
{
if(i == j || a[vis[j]].r == )
continue;
double tt = dis(a[vis[j]], a[vis[i]]) - a[vis[j]].r;
tt = max(tt, 0.0);
a[vis[i]].r = min(a[vis[i]].r, tt);
}
tmp += area(a[vis[i]].r);
}
ans = max(ans, tmp);
}while(next_permutation(vis, vis+n)); //求出关于各个圆心位置的全排列
printf("%.0f\n", fabs(total-ans)); //关于next_permutation:http://bbs.csdn.net/topics/392058688
}
return ;
}
算法训练 Balloons in a Box (枚举,模拟)的更多相关文章
- Java实现 蓝桥杯 算法训练 Balloons in a Box
试题 算法训练 Balloons in a Box 问题描述 你要写一个程序,使得能够模拟在长方体的盒子里放置球形的气球. 接下来是模拟的方案.假设你已知一个长方体的盒子和一个点集.每一个点代表一个可 ...
- ALGO-115_蓝桥杯_算法训练_和为T(枚举)
问题描述 从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T.每个元素限选一次,不能一个都不选. 输入格式 第一行一个正整数n,表示整数集内元素的个数. 第二行n个整数,用空格隔开. 第 ...
- C语言 · 数字三角形 · 算法训练
问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行数≤100: ...
- 算法训练 K好数
算法训练 K好数 时间限制:1.0s 内存限制:256.0MB 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数 ...
- 蓝桥杯 算法训练 ALGO-146 4-2找公倍数
算法训练 4-2找公倍数 时间限制:1.0s 内存限制:256.0MB 查看参考代码 问题描述 这里写问题描述. 打印出1-1000所有11和17的公倍数. 样例输入 一个满足题 ...
- Java实现 蓝桥杯 算法训练 审美课
算法训练 审美课 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 <审美的历程>课上有n位学生,帅老师展示了m幅画,其中有些是梵高的作品,另外的都出自五岁小朋友之手.老师 ...
- Java实现 蓝桥杯 算法训练 字串统计
算法训练 字串统计 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最 ...
- Java实现 蓝桥杯 算法训练 最大的算式
算法训练 最大的算式 时间限制:1.0s 内存限制:256.0MB 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为 ...
- Java实现蓝桥杯VIP算法训练 纪念品分组
试题 算法训练 纪念品分组 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得的纪念品价值 相对均衡, ...
随机推荐
- maven学习7 settings.xml解析
maven的配置文件settings.xml存在于两个地方: 1.安装的地方:${M2_HOME}/conf/settings.xml 2.用户的目录:${user.home}/.m2/setting ...
- VMware安装操作系统(Operating System not found一个错误原因)
因为指定的IOS文件是多种操作系统的组合,如Win7(32位和64位完全版),那么安装的时候选择一个操作系统类型和ios文件的类型就匹配不上,所以出现这种错误.
- 2016.1.1 VS中宏的使用技巧点滴
Dim selection As TextSelection = DTE.ActiveDocument.Selection'定义 TextSelection 对象 selection.StartOfL ...
- angular之增删改查
<!DOCTYPE html> <html lang="en" ng-app="app"> <head> <meta ...
- java之静态函数和静态变量
静态变量: 静态变量好似一种成员变量,它的特点是前面有static. 普通变量会有多份,它在每个对象当中都存在,但是静态变量只有一份,它是属于类的. 静态变量的调用方法: 1.类名.变量名 Custo ...
- [Python Study Notes]饼状图绘制
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- 免安装Oracle客户端使用PL/SQL连接Oracle
只需要在Oracle下载一个叫Instant Client Package的软件就可以了,这个软件不需要安装,只要解压就可以用了,很方便,就算重装了系统还是可以用的. 下载地址:http://www. ...
- activity的四种加载模式介绍
四种加载模式的介绍: a) Standard : 系统默认模式,一次跳转即会生成一个新的实例: b) SingleTop : 和 standard 类似,唯一的区别就是当跳转的对象是位于栈顶 ...
- cocos2dx中坐标系
CCNode类的setPosition,getPosition函数如果是一个Node的Child则获取的坐标就是该Node的本地坐标 另一个关键问题就是在cocos2d-x里就是各种对象的大小问题.因 ...
- 机器人自主移动的秘密,从SLAM技术说起(一)
博客转载自:https://www.leiphone.com/news/201609/c35bn1M9kgVaCCef.html 雷锋网(公众号:雷锋网)按:本文作者SLAMTEC(思岚科技公号sla ...