Description

There are n piles of stones of sizes a1, a2, …, an lying on the table in front of you.

During one move you can take one pile and add it to the other. As you add pile i to pile j, the size of pile j increases by the current size of pile i, and pile i stops existing. The cost of the adding operation equals the size of the added pile.

Your task is to determine the minimum cost at which you can gather all stones in one pile.

To add some challenge, the stone piles built up conspiracy and decided that each pile will let you add to it not more than k times (after that it can only be added to another pile).

Moreover, the piles decided to puzzle you completely and told you q variants (not necessarily distinct) of what k might equal.

Your task is to find the minimum cost for each of q variants.

Input

The first line contains integer n (1 ≤ n ≤ 105) — the number of stone piles. The second line contains n space-separated integers: a1, a2, …, an (1 ≤ ai ≤ 109) — the initial sizes of the stone piles.

The third line contains integer q (1 ≤ q ≤ 105) — the number of queries. The last line contains q space-separated integers k1, k2, …, kq (1 ≤ ki ≤ 105) — the values of number k for distinct queries. Note that numbers ki can repeat.

Output

Print q whitespace-separated integers — the answers to the queries in the order, in which the queries are given in the input.

Please, do not use the %lld specifier to read or write 64-bit integers in C++. It is preferred to use the cin, cout streams or the %I64d specifier.

Examples

input

5

2 3 4 1 1

2

2 3

output

9 8

Note

In the first sample one way to get the optimal answer goes like this: we add in turns the 4-th and the 5-th piles to the 2-nd one; then we add the 1-st pile to the 3-rd one; we add the 2-nd pile to the 3-rd one. The first two operations cost 1 each; the third one costs 2, the fourth one costs 5 (the size of the 2-nd pile after the first two operations is not 3, it already is 5).

In the second sample you can add the 2-nd pile to the 3-rd one (the operations costs 3); then the 1-st one to the 3-th one (the cost is 2); then the 5-th one to the 4-th one (the costs is 1); and at last, the 4-th one to the 3-rd one (the cost is 2).

这道题的题意是合并石子,给你n堆石子,每堆石子最多选取K堆石子合并到这堆石子,合并一堆石子代价是石子的数量。

首先我们先排序,排序后的石子数量是a[1] a[2]……a[n],对于每一堆合并之后最后一次合并必然所有堆合到堆代价为sum(石子总数-a[i]) 当i==n时,代价最小。在讨论前n-1堆和并的问题,前n-1和并的代价最小是分成K堆加到第n堆最小,则对于前n-1堆就要分成k堆,对于K堆的每一堆又要分成K堆最小,不断递归据可以得到最终结果,但是递归之后容易超时,容易爆栈,改写为递推,那么对于前K堆合并的代价是sum[n-1],那么对于K堆的K堆合并的sum[n-1-k],对于K堆的K堆的K堆合并的代价就是sum[n-1-k*k],当这个值小于1的时候,就没有石子可以合并了,于是可以写出代码

#include <bits/stdc++.h>
using namespace std;
const int MAX=999990;
long long int a[MAX] = {0};
long long int sum[MAX] = {0};
long long int m, q,x,y;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1, a+n+1);
for(int i=1;i<=n;i++) a[i] += a[i-1];//前缀和
cin>>m;
while(m--)
{
cin>>q;
if(q>=n) cout<<a[n-1]<<' ';
else{
x = n - 1;
y = q;
if(sum[q]==0) //如果重复出现就不用计算了,不然会超时
while(x>=1)
{
sum[q] += a[x];
x -=y;
y *= q;
}
cout<<sum[q]<<' ';
}
}
return 0;
}

codeforce 227D Naughty Stone Piles (贪心+递归+递推)的更多相关文章

  1. 蓝桥杯—BASIC-21 sine之舞(递归递推)

    题目:最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数,所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们的计算能力. 不妨设 An=sin(1– ...

  2. 再谈循环&迭代&回溯&递归&递推这些基本概念

    循环:不断重复进行某一运算.操作. 迭代:不断对前一旧值运算得到新值直到达到精度.一般用于得到近似目标值,反复循环同一运算式(函数),并且总是把前一 次运算结果反代会运算式进行下一次运算 递推:从初值 ...

  3. 【Java】递归递推的应用

    利用阶乘公式来计算组合式: 程序设计思想: 根据公式来计算组合数的大小,从键盘输入n,k的值,设计一个计算阶乘的大小,如果输入的数a为1或0,则直接return 1,否则运用递归,计算a-1的阶乘,直 ...

  4. 第二场周赛(递归递推个人Rank赛)——题解

    很高兴给大家出题,本次难度低于上一场,新生的六个题都可以直接裸递归式或者裸递推式解决,对于老生的汉诺塔3,需要找出一般式,后两题分别为裸ST算法(或线段树)/线性DP. 正确的难度顺序为 种花 角谷定 ...

  5. 蓝桥杯—ALGO-12 幂方分解(递归递推)

    问题描述 任何一个正整数都可以用2的幂次方表示.例如: 137=27+23+20 同时约定方次用括号来表示,即ab 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步 ...

  6. 观光公交 2011年NOIP全国联赛提高组(贪心,递推)

    观光公交 2011年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold       题目描述 Description 风景迷人的小城 Y 市 ...

  7. 从一道NOI练习题说递推和递归

    一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...

  8. 斐波那契数列 递归 尾递归 递推 C++实现

    ==================================声明================================== 本文原创,转载请注明作者和出处,并保证文章的完整性(包括本 ...

  9. 百练2755 奇妙的口袋 【深搜】or【动规】or【普通递归】or【递推】

    总Time Limit:  10000ms  Memory Limit:  65536kB 有一个奇妙的口袋.总的容积是40,用这个口袋能够变出一些物品,这些物品的整体积必须是40.John如今有n个 ...

随机推荐

  1. Highcharts图表库

    Highcharts图表库 1.相关网址: 1)官方主页:https://www.hcharts.cn/ 2)Highcharts演示:https://www.hcharts.cn/demo/high ...

  2. [转] [知乎] Roguelite 和 Roguelike 的区别是什么?

    编者按 本文译自 Ethan Hawkes 一篇介绍 rogue-lite 概念的文章,已获作者授权,英文原文见这里,译文首发于这里.注意本文写于 2013 年,正是 roguelite 类型的独立游 ...

  3. SpringBoot全局异常处理与定制404页面

    一.错误处理原理分析 使用SpringBoot创建的web项目中,当我们请求的页面不存在(http状态码为404),或者器发生异常(http状态码一般为500)时,SpringBoot就会给我们返回错 ...

  4. [YII2] 修改默认控制器Controller以及默认方法Action

    试了好多方法都没成功,下面方法绝对能成功设置 在框架里面有源码,在/vendor/yiisoft/yii2/web/Application.php的第34行找到了: class Application ...

  5. 尾递归和JAVA

    简单来说,递归即是调用自己本身.所有递归都应该有至少一个基本条件,在满足基本条件时不进行递归. 给出一个递归实例: int fact(int N){ if(N==1) return 1; else r ...

  6. Android App安全渗透测试(一)

    一.            实验环境搭建 1.      安装JDK 2.      安装Android Studio 3.      模拟器或真机 我的是夜神模拟器和nexus 工具 Apktool ...

  7. JS流程图解决方案GoJS

    GoJs简介 一个实现交互类图表(比如流程图,树图,关系图,力导图等等)的JS库 GoJS依赖于HTML5,所以请保证您的浏览器版本支持HTML5,当然还要加载这个库. 首先个人建议先下载官方实例的 ...

  8. ubuntu17.10安装lnmp安装包的核心问题-gcc版本、g++版本

    大致碰到的问题都是这样,不是php安装失败,就是MySQL安装失败,或者Nginx也安装失败 基本上是花式报错.后来在军哥的论坛中找到了这个帖子:https://bbs.vpser.net/viewt ...

  9. 关于Sysinternals Suite

    sysinternals 的网站创立于1996年由Mark russinovich和布赖科格斯韦尔主办其先进的系统工具和技术资料·微软于2006年7月收购sysinternals公司 . 不管你是一个 ...

  10. [Asp.Net Core] Blazor Server Side 扩展用途 - 配合CEF来制作客户端浏览器软件

    前言 大家用过微信PC端吧? 这是用浏览器做的. 用过Visual Studio Code吧? 也是用浏览器做的. 听说, 暴雪客户端也包含浏览器核心?? 在客户端启动一个浏览器, 并不是什么难事了. ...