RQNOJ系统遇到了一个程序错误。

您可以通过邮件support (at) rqnoj.cn与我们进行联系。请附错误参考编号:318436

破译密码 - 题库 - RQNOJ
PID415 / 破译密码
题目描述

Feli得到总部发来的消息,我军特种部队已经截获敌人的一个密码本,但是这个密码本本身是由密码写成的。为了给敌人造成沉重的打击,Feli必须尽快破译密码。

经过一天一夜的探索,Feli发现日军密码本实际上记载着一个数列,而最终密码由这个数列经过某种运算得到。运算是这样的:

1. 把数列从小到大排序。

2. (分拆)在排好序的数列中,任选一个数,这个数将把原数列分成左右两个数列(选出的数不在新数列中,并且新数列有可能为空)。

3. 对每个新数列进行第2步操作,直到最后得到的数列长度都为1,即全部变成单个数。

4. 将第3步得到的每个数*(得到它所需的分拆次数+1),累加得到一个和。

5. 重复2,3,4操作,直到遍历所有的分拆可能,这时,所得的和当中最小的一个就是日军的最终密码。

6. 现在Feli请求你帮助,尽快破译这段密码!

样例说明

1. 数列排序得 1 2 3

2. 选出一个数 2

3. 分拆得

2

/

1 3

此时新的数列(1,3)长度都已经是1,因此无须再分拆

4. 求和,2*1+1*2+3*2=10(2在原数列,故乘1;1和3都经过一次分拆,故乘2)

2. 选出一个数 1

3. 分拆得

1

2 3

2 3中选一个数 2,分拆得

1

2

3

4. 求和,1*1+2*2+3*3=14

……

……

所有和当中最小的是10,故输出10

题后剧情:

在你的帮助下,Feli最终成功地破译出了密码,居然发现这个密码是关于敌人援军的行动方案的内容!我军便按照这个破译后密码的内容指示的地点伏击敌人。结果成功歼灭了敌人刚刚到达的援军。使得敌人的的主力部队孤立无援。在这次战斗后,Feli名声传遍全军。

输入格式

输入数据第一行为N,N≤1000,表示密码本记录的数列的长度。

下一行共有N个数,即日军密码本记载的数列。

输出格式

输出数据为一个整数,即日军最终密码。

样例输入
样例输出
提交题目 Error [ 更改语言 ] Language
C C++ Pascal Python2
相关讨论
查看更多讨论
发布新讨论 讨论