FZU-1515 Balloons in a Box
2016-02-17 19:06
483 查看
Problem 1515 Balloons in a Box
题目描述
给你一个长方体,然后给定长方体中几个坐标,让你依次在这几个坐标上放气球,放入的气球会一直膨胀直到遇到长方体的外壁或是遇到其他的气球,希望你得出一种放气球的方式使得气球占有的总体积最大,题目要求输出长方体中剩余的体积解题思路
因为数据范围很小,所以枚举所有的放气球的方法就好了,网上有用dfs的,我用的是STL的next_permutation,结果一样,最多省几行代码。然后,THAT IS NOT THE KEY.
这道题教给我的是,如何控制输出格式,设置小数点后的位数要使用cout << fixed << setprecision() << ......;
还有吐个槽就是<cmath>中的round函数返回值居然是double,你都四舍五入了就不能给我个痛快吗。
还有福州大学的OJ和POJ居然都不支持# include <bits/stdc++.h>
</pre><h2><strong>代码</strong></h2><p></p><pre name="code" class="cpp">/**************************************************************** > File Name: tmp.cpp > Author: Uncle_Sugar > Mail: uncle_sugar@qq.com > Created Time: 2016年02月17日 星期三 09时31分03秒 ****************************************************************/ //# # include <bits/stdc++.h> # include <iostream> # include <algorithm> # include <cmath> # include <climits> # include <cstdio> # include <iomanip> using namespace std; const int debug = 1; const int size = 6 + 10; const double Pi = acos(-1.0); typedef long long ll; struct point{ double x,y,z; void read(){cin >> x >> y >> z;} bool operator < (const point& cmper)const{ if (x!=cmper.x) return x<cmper.x; else if (y!=cmper.y) return y<cmper.y; else return z<cmper.z; } }; double square(double x){ return x*x; } point coner[2]; point p[size]; double R[size]; double dist(const point& p1,const point& p2){ double ret = square(p1.x-p2.x) + square(p1.y-p2.y) + square(p1.z-p2.z); return sqrt(ret); } double v_sph(double r){ return 4.0/3*Pi*r*r*r; } double v_rec(point& p1,point& p2){ return fabs((p1.x-p2.x)*(p1.y-p2.y)*(p1.z-p2.z)); } int n; int main() { std::ios::sync_with_stdio(false);cin.tie(0); int i,j,k; while (cin >> n){ for (i=0;i<2;i++) coner[i].read(); for (i=0;i<n;i++) p[i].read(); sort(p,p+n); double ans = 0; do{ for (i=0;i<n;i++){ double mindist = 100000; for (j=0;j<2;j++){ point& P = p[i]; point& C = coner[j]; double dx = fabs(P.x - C.x); double dy = fabs(P.y - C.y); double dz = fabs(P.z - C.z); mindist = min(mindist,min(dx,min(dy,dz))); } for (j=i-1;j>=0;j--){ double d = dist(p[i],p[j])-R[j]; mindist = min(mindist,d); } R[i] = mindist; //# cout << R[i] << endl; } double tmp = 0; for (i=0;i<n;i++){ if (R[i]>0) tmp += v_sph(R[i]); } ans = max(ans,tmp); }while(next_permutation(p,p+n)); ans = round(v_rec(coner[0],coner[1]) - ans); //# printf("%.0f\n",round(ans)); cout << fixed << setprecision(0) << ans << endl; } return 0; }
相关文章推荐
- Anaroid WebView 的属性汇总
- mvc学习视频
- 自己定义控件-GifView
- 知其然亦知其所以然--NSOperation并发编程 (转)
- js晋级篇——前端内存泄漏探讨
- hibernate4之一对多关系映射(三)
- hdoj 1251 统计难题【字典树 基础题】
- How Do I Declare A Block in Objective-C?
- tyvj P1519 博彩游戏(AC自动机+DP滚动数组)
- Eclipse和PyDev搭建完美Python开发环境(Windows篇)
- Unity中预览lua脚本
- Java垃圾回收机制
- 联系人框架(转)
- 垂直型爬虫架构设计(3)
- 百万数据查询优化技巧三十则
- 获取时间并更新显示(包含星期天)
- GNU C内嵌汇编学习笔记
- 分库分表策略的可实现架构
- Apple Pay(转)
- 自定义ViewGroup+ViewDragHelper 自己做个SlidingUpPanel