20161023 NOIP 模拟赛 T1 解题报告


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

——————————分割线—————————

瞎基本枚举。

 1 #include "cstdio"
 2 #include "algorithm"
 3 #include "iostream"
 4 #include "fstream"
 5 #include "sstream"
 6 #include "cmath"
 7 #include "cstdlib"
 8 
 9 using namespace std ;
10 typedef long long QAQ ;
11 const long long INF = 2147483647 ;
12 
13 QAQ min_val = INF ; 
14 
15 inline QAQ gmin ( const QAQ x , const QAQ y ) { return x > y ? y : x ; }
16 
17 int main ( ) {
18         QAQ N , n ; 
19         freopen ( "box.in" , "r" , stdin ) ;freopen ( "box.out" , "w" , stdout ) ;
20         cin >> N ; 
21         n = ( QAQ ) cbrt ( ( QAQ ) N ) ;
22         for ( QAQ i=1 ; i<=n ; ++i ) 
23                 for ( QAQ j=1 ; j<= ( QAQ ) sqrt ( ( QAQ ) ( N / i ) ) ; ++j ) 
24                         if ( !( N % i ) && !( N % j ) && !( N % ( N / i / j ) ) ) min_val = gmin ( min_val , ( i * j + ( N / j ) + ( N / i ) ) << 1 ) ; 
25         cout << min_val << endl ; 
26         fclose ( stdin );fclose ( stdout ) ;
27         return 0 ; 
28 } 

2016-10-25  15:37:44