360公司技术综合2020春(编程1)

题目描述

堆积货物


时间限制:C/C++语言1000ms,其他语言3000ms
内存限制:C/C++语言65536kb,其他语言589824kb
题目描述
在某个仓库中,堆积了很多的货物,每个货物是一个正方体的,边长为1。所有货物恰好堆积成一个长方体,边长为R * C * L。
目前,在某次确认货物的时候,管理员意识到这一堆货物被小偷偷走了一些。
这个小偷将原来的R * C * L的货物组成的长方体偷成了恰好(R - 2) * (C - 1) * (L - 2)的长方体。
但是管理员记不得R、C、L的具体数值了,他只能计算现在的货物总数。他希望算出来最坏情况下被偷了多少的货物,输出这个最坏的值。

输入

输入为一个数 n,表示题面中的(R - 2) * (C - 1) * (L - 2)

输出

输出为一个数,表示最坏情况下被偷了多少的货物

样例输入

4

样例输出

41

提示

对于100%的数据:1 <= n <= 109
样例解释:R = 3, C = 5, L = 3, 3 * 5 * 3 - (3 - 2) * (5 - 1) * (3 - 2) = 41

代码
#include<iostream>
using namespace std;

int main(){
    long long n;
    cin >> n;
    cout << 9 * (n + 1) - n;

    return 0;
}
答题思路

这道题代码看起来很简单,但当时做起来其实不简单。

  1. 首先输出结果那个公式9 * (n + 1) - n是归纳总结出来的:
    原体积是R * C * L,现体积是n = (R - 2) * (C - 1) * (L - 2),设现长方体边长R0、C0、L0则:
    原体积为R0 + 2、C0 + 1、L0 + 2,被偷走的体积为(R0 + 2) * (C0 + 1) * (L0 + 2) - n。

经过计算发现如下规律:

nR0 + 2C0 + 1L0 + 2被偷体积
41 + 24 + 11 + 23 * 3 * 5 - 4 = 41
51 + 25 + 11 + 23 * 3 * 6 - 5 = 49
61 + 26 + 11 + 23 * 3 * 7 - 6 = 57
n1+2n+11+23 * 3 * (n + 1) - n

也就是说不管n是多少,都是当这个长方体为(R0, C0, L0) = (1, n, 1)时,被偷掉的体积最大。


  1. 然后,题设要求 “ 对于100%的数据:1 <= n <= 109 ”,109大概就一个int的范围。
    但是,,计算机在计算我们那个公式的时,其过程中的所有数值的范围是由定义的 n 的范围决定的;
    也就是说,我们在定义 n 的范围时,要定义成那个公式的数值范围,因此是long long n。

个人经验,可能有错漏,望评论指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值