博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 10012 - How Big Is It? 堆球问题 全排列+坐标模拟 数据
阅读量:7086 次
发布时间:2019-06-28

本文共 5355 字,大约阅读时间需要 17 分钟。

题意:给出几个圆的半径,贴着底下排放在一个长方形里面,求出如何摆放能使长方形底下长度最短。

由于球的个数不会超过8, 所以用全排列一个一个计算底下的长度,然后记录最短就行了。

全排列用next_permutation函数,计算长度时坐标模拟着摆放就行了。

摆放时折腾了不久,一开始一个一个把圆放到最左端,然后和前面摆好的圆比较检查是否会出现两个圆重叠,是的话就把当前圆向右移动到相切的位置。然后判断宽度。

结果发现过不了几个例子,检查了好久,终于发现问题出在初始位置上,如果出现一个特别小的圆放到最左端,然后和摆好的圆比较时就会跳过而没有移动,这样就会对后面的圆的摆放及判断产生影响。

于是把初始位置放在前一个圆的相切部分,然后再进行比较,想到可能出现这样摆放在有一个大圆出现时可能发生圆的左端超出左边的墙壁,于是多判断了一下。然后终于把uva论坛上的全部样例都过了。

可是接下来就出现了坑爹的事情了。交到uva上面老wa,结果搞了一早上却给wa掉实在令人沮丧。下午lzg同学告诉我这题的数据可能非常大,我可能是数字初始化时初始化得太小。果不其然,改成1e9就过了,在此感谢下lzg同学的帮助。

本来考虑全排列时有一个想法,如果圆全排列求解的话,一个摆放方法的解会和它倒过来的解释一样的,于是只需要判断前面一半的排列,从而减掉一半的计算量。可是当我这样去做时却wa掉了,我不知道到底这样会有什么问题,这题折腾了太久拖着我的进度,所以就先这样了。如果看官有什么想法的话可以留言评论下。

以下是我的代码:

 

#include 
#include
#include
#include
using namespace std;double r[10], M, sum;int n, t; //tm放阶乘的一半double cdis(double a, double b) { //circles' dis return 2 * sqrt(a * b);}double pdis(double x, double y) { //points' dis return sqrt(x * x + y * y);}double check() { int i, j; double x[10], y[10], left = 0; for (i = 0; i < t; i++) { y[i] = r[i]; if (i == 0) x[i] = r[i]; else x[i] = x[i - 1] + cdis(r[i], r[i - 1]); if (x[i] < r[i]) x[i] = r[i]; for (j = 0; j < i; j++) { if (r[i] + r[j] > pdis(x[i] - x[j], y[i] - y[j])) { x[i] = x[j] + cdis(r[i], r[j]); } } if (left < x[i] + r[i]) left = x[i] + r[i]; } return left;}int main() { scanf("%d", &n); while (n--) { M = 1000000000; scanf("%d", &t); for (int i = 0; i < t; i++) scanf("%lf", &r[i]); check(); sort (r, r + t); do { sum = check(); if (sum < M) M = sum; } while (next_permutation(r, r + t)); printf("%.3lf\n", M); } return 0;}

 

这题给我的教训就是:

当一个数的类型为double时,它的值可能非常大,数据也可能非常大,这时候最大值要尽量开到最大。

下面是数据:

Input:

 

1008 1.344 0.852 0.269 1.472 3.170 1.329 0.579 2.8473 0.196 0.009 0.7357 0.030 3.821 1.368 1.545 5.434 0.934 0.1053 0.467 0.889 0.4617 0.744 1.173 1.035 0.354 0.300 1.102 0.7086 1.419 5.220 1.208 0.714 1.741 8.1517 0.453 2.879 1.834 3.639 1.361 0.558 1.2808 10.519 0.553 4.513 0.911 1.170 0.293 0.678 1.4632 1.069 0.6165 1.780 3.458 2.220 0.659 0.7508 0.146 1.085 7.379 0.992 4.334 3.427 0.608 2.3751 0.1555 0.119 2.052 0.379 2.150 0.6934 63.499 0.249 3.666 0.3225 1.890 4.796 0.583 0.187 0.3471 1.0794 0.209 1.862 1.430 5.8678 3.265 0.590 0.054 1.583 0.074 1.585 0.525 0.9894 2.232 7.205 150.375 1.4671 11.7406 10.779 3.807 1.716 0.428 0.536 1.2244 1.071 2.685 0.794 0.1174 0.608 0.486 0.135 4.5331 0.4698 2.294 0.756 10.556 3.538 2.250 0.383 0.858 1.1603 2.463 1.446 1.8095 2.174 0.154 0.322 0.539 0.8477 0.429 1.694 2.170 0.214 0.369 0.275 8.1825 2.159 0.739 1.132 0.733 0.3283 7.906 3.212 1.7241 3.7594 2.750 1.045 1.434 19.3912 0.241 12.7104 0.900 0.978 0.568 0.9687 1.056 0.084 1.089 3.910 0.114 1.221 2.4113 2.301 1.375 0.2982 0.376 0.5324 2.275 0.261 0.087 2.7055 0.605 1.057 0.257 0.706 0.8613 0.203 0.627 0.8481 4.0485 3.357 0.641 4.038 0.864 0.6678 0.252 0.416 1.932 0.365 0.621 0.502 8.299 0.3182 40.436 3.0877 0.682 2.496 0.322 0.786 0.128 0.625 0.4384 1.042 2.291 0.724 1.5048 1.460 5.581 0.001 25.125 1.713 2.704 0.342 0.7166 0.102 0.469 0.859 4.451 2.170 1.6028 1.830 14.377 0.517 0.685 1.184 0.001 1.011 1.3856 0.855 0.000 1.823 0.768 0.426 1.1575 0.647 2.051 0.537 1.676 0.3393 3.623 0.364 0.9948 0.947 1.024 0.263 0.773 1.279 4.074 49.961 0.0652 6.345 16.9255 4.651 0.156 1.075 0.480 2.6295 1.256 0.227 0.054 0.035 1.9122 1.203 0.7517 5.175 0.518 1.108 8.091 0.274 1.003 0.5556 0.291 0.175 0.370 7.216 0.554 1.6287 0.847 0.676 0.577 0.492 1.407 0.868 10.2572 0.812 1.1086 1.286 19.802 0.499 0.333 0.598 13.3063 0.688 0.263 21.9641 0.7488 0.203 1.499 23.346 1.314 2.114 0.833 1.757 14.0827 7.280 0.942 0.389 1.521 1.467 0.963 2.6346 0.588 0.239 0.647 2.450 1.536 0.2918 22.087 1.160 10.010 0.527 1.168 0.720 0.184 0.6707 3.225 1.402 1.486 2.549 1.023 1.008 2.2632 0.955 1.2025 3.073 7.774 6.587 8.906 1.2826 0.301 0.835 4.213 0.848 5.414 1.3154 0.731 2.590 2.308 0.2351 1.2508 0.383 3.919 0.738 0.429 0.663 0.698 1.331 1.5317 1.280 0.356 0.686 1.039 0.680 0.058 0.4906 1.031 0.174 1.945 0.773 0.680 0.4668 0.413 0.689 4.510 0.694 1.453 3.161 0.971 0.2833 0.781 1.030 1.6663 0.061 1.953 1.6543 0.036 0.741 0.4773 1.826 2.268 2.8517 0.319 2.537 1.363 35.278 0.172 6.054 4.5332 5.517 1.4472 0.226 0.4938 2.559 0.443 4.470 1.445 1.162 0.258 0.193 1.6444 0.563 3.274 1.186 0.8038 0.303 7.870 17.105 0.734 1.000 6.424 3.592 2.1057 1.028 2.475 1.486 0.505 0.480 0.133 1.7022 0.528 1.1904 8.753 0.326 0.944 0.8432 0.870 1.0014 0.324 0.899 0.772 5.1908 0.182 2.026 12.486 2.303 1.066 4.099 0.923 1.2867 2.644 0.931 0.367 0.779 0.618 0.190 11.1668 1.903 0.002 1.174 3.766 0.789 1.874 7.221 0.8308 0.579 0.657 0.518 0.567 19.806 0.080 0.186 2.4286 0.778 3.006 5.973 8.024 0.042 0.2687 0.148 0.226 3.190 0.146 1.708 0.398 0.3175 2.595 0.559 0.306 1.292 1.908

Output:

 

 

20.3341.69021.8703.4979.80928.01520.39728.8123.30814.98732.7160.3109.063126.99812.7072.15815.69514.333300.75023.48027.3988.1779.0660.93831.70111.2516.26919.7378.87722.3987.51838.78225.4206.71817.1247.2331.8029.9416.4533.0188.09614.97618.23980.8728.69410.29954.38915.75428.7549.1458.7778.41299.92243.99615.1146.2673.85526.20815.69920.5143.81765.57243.9281.49673.69123.3099.04161.83523.8244.30049.91820.04410.2482.50015.2328.3578.82918.3256.7127.2022.40713.74370.56012.6151.38720.2819.58161.57013.1333.30317.5063.73710.40934.57224.67727.36739.61232.2949.56611.336

 

 

转载地址:http://srrml.baihongyu.com/

你可能感兴趣的文章
浪潮IPF2016宣布一系列举措背后的思考是什么?
查看>>
每一个程序员要遵守的一些优秀编程风格
查看>>
大数据化雨落地 BDA万唤始出来
查看>>
三头狗又来了 Windows再现毁灭级漏洞
查看>>
企业安全需警惕:流行APP均遭恶意软件克隆
查看>>
IDG评2008十大IT新闻 蓝光标准胜出入围
查看>>
阿里CEO张勇:网络安全需要全生态协作
查看>>
光纤已落伍?英国实现100Gbps空间光通信!
查看>>
Petya勒索病毒安全预警通告
查看>>
中国人工智能学会通讯——智力测试与智能测评的对比思考
查看>>
Linux 动态库相关知识总结
查看>>
Docker 基础技术:Linux Namespace(下)
查看>>
大鱼吃光小鱼,绝不可能!盘点2016存储行业发生的大事件
查看>>
SSM(十) 项目重构-互联网项目的Maven结构
查看>>
科技改变未来 物联网痛下决心治电梯吃人
查看>>
创业者谈360路由失败:懒惰和自以为是的产品设计
查看>>
开源网络取证工具Xplico
查看>>
来瞧瞧金砖大会的“护花使者”吧!
查看>>
这10 个工具,让你效率提升
查看>>
BlackHat:大多数网页模板漏洞可被利用轻易突破沙盒
查看>>