【NOIP模拟赛】【数学真奇妙系列】纸盒子
2016-10-23 21:57
225 查看
Task 1.纸盒子(box.pas/box.c/box.cpp)
【题目描述】Mcx是一个有轻度洁癖的小朋友。有一天,当他沉溺于数学卷子难以自拔的时候,恍惚间想起在自己当初学习概率的时候准备的一堆橡皮还杂乱地堆在自习室里。这显然是他无法容忍的。于是他决定做一个体积为V(V=abc)的纸盒子,以便能整齐的摆放它们。为了简单起见,这个纸盒子的长、宽、高均为正整数。当然了,Mcx是一个以勤俭闻名的小朋友,因此他想知道,这个纸盒子的表面积(S=2ab+2ac+2bc)的最小值是多少呢?
【题目输入】
仅一行,为一个正整数V,表示纸盒子的体积。
【题目输出】
仅一行,为一个正整数S,表示纸盒子的最小表面积。
【样例输入】
17
【样例输出】
70
【样例解释】
对于体积为17的盒子只有一种制作方法就是长1宽1高17(这里我们可以认为长,宽,高是等价的),于是它的最小表面积就是2*1*17+2*1*17+2*1*1 = 70
【数据范围】
30%数据满足V<=1000
100%数据满足V<=10^9
【题解】
刚开始做这道题的时候看得出是道数学题,但身为一名数学蒟蒻就是想不出来数学方法,考完后看题解才恍然大悟。
首先要枚举长宽高,但根据数据范围直接枚举会炸的很惨(比如我)。假定a<=b<=c,那么a的最小值为1,最大值为三次根号下V,于是就从1枚举到三次根号下V即可。对于b,由于a已经枚举出,b的最小值就为a,最大值为根号V,于是就从a枚举到根号V即可。对于C,由于a和b已经枚举出,用V/a/b即可。
每枚举完一组a、b、c,先判断a、b、c能不能合法构成改体积的纸盒,即能否被体积除尽。若合法,则记录所有结果中的最小值。输出最小值即可。
AC代码:
#include <cstdio> #include <cmath> using namespace std; long long N,minn=1e9; int main(){ scanf("%lld",&N); for(int i=1;i<=sqrt(N);++i) //并不知道三次根号怎么写于是偷懒写了个根号。。 for(int j=i;j<=sqrt(N/i);++j) if(!(N%i)&&!(N%j)&&!(N%(N/i/j))){ long long t=2*(i*j+i*(N/i/j)+j*(N/i/j)); if(t<minn) minn=t; } printf("%lld",minn); return 0; }
相关文章推荐
- 【NOIP模拟赛】【数学真奇妙】【递推】旅行者问题
- 【数学期望】【NOIP模拟赛】连续段的期望
- 【NOIP模拟赛】书 数学+期望概率
- 【NOIP模拟赛】 permutation 数学(打表)
- noip模拟赛 abcd
- 【2014.8.17NOIP普及组模拟】【高精度乘法】公牛数学(bullmath.pas/c/cpp) //2018.2.2
- 2016.07.07【初中部 NOIP提高组 】模拟赛C
- noip模拟赛 不等数列
- 【NOIP模拟赛】与非 乱搞
- google黑板报---数学之美系列
- NOIP模拟赛-旅行者问题 解题报告
- 2017.03.18【NOIP 普及组】模拟赛C组 蚂蚁 题解
- 【蒻爆了的NOIP系列--普及组复赛】(2)NOIP2011普及组复赛题解
- 20161022 NOIP模拟赛 解题报告
- 面试之逻辑推理系列--从“分金条付工资”看逻辑推理题中的数学推导及反向推理的策略
- noip 模拟赛 匹配 //贪婪策略
- 20161022 NOIP模拟赛 T1 解题报告
- 2017.3.25【NOIP提高组】模拟赛B组
- 数学之美 系列七 – 信息论在信息处理中的应用
- 数学之美 系列 12 - 余弦定理和新闻的分类