题目链接:http://codeforces.com/problemset/problem/461/A

题目意思:给出一群由 n 个数组成的集合你,依次循环执行两种操作:

(1)每次Toastman得到一个集合,他计算所有数的和,并且将它加入到score里。之后他将这个集合传给Appleman。

(2)Appleman得到的集合如果只有一个数,就把它弃之,否则将这个集合分成 两个不相交且不空的集合,传回给Toastman.

这些操作不断执行直到集合个数变为0,也就是通过使集合都变成只有一个元素而一个个扔掉。问如何划分使得score最大。

其实通过模拟这两个操作可以发现应该怎样划分来使得score最大的。就是每次分成两个集合的时候,保证其中一个只含有单个元素的集合的那个元素是未划分前的集合那个是最小的。例如{1, 3, 8, 7} 第一次划分变成{1}, {3, 8, 7},第二次就是{3}, {8, 7}({1}这个集合根据题意已经扔掉了),第三次就是{7}, {8}。有没有发现,1 这个数被加了两次,3被加了三次,,7被加了四次,8也是被加了四次呢? 对!!这就是解题的规律所在。

我的做法是,边输入边统计整个集合的和,也就是最开始时那一群数要加到score中,然后从小到大排序,对于第 i 个数即a[i] 就乘上 i (循环初始是从1开始的),加入到score中,注意,对于最后那次划分,即只有两个数的那个集合{an-1, an},对于a[n],它不是乘上n次,而是n-1次。还有一个注意的地方是,score要用long long 。因为有可能 > 3e5*1e6,还蛮大的。

昨晚比赛的时候,由于A(读错题),B(被hack)题做得较差,做C题只剩20min,有一点点思路,来不及写完。得到的教训就是,注意数据范围,long long 处理之!!!

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std; typedef long long LL;
const int maxn = 3e5 + ;
LL a[maxn]; int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
LL s = ;
for (int i = ; i <= n; i++)
{
scanf("%lld", &a[i]);
s += a[i];
}
sort(a+, a++n);
for (int i = ; i < n; i++)
s += (LL) a[i] * (LL)i; // 因为之前算了一次总和,所以不是a[i]*(i+1)
s += (LL)(n-)*(LL)a[n];
printf("%lld\n", s);
}
return ;
}

codeforces 462C Appleman and Toastman 解题报告的更多相关文章

  1. Codeforces Educational Round 92 赛后解题报告(A-G)

    Codeforces Educational Round 92 赛后解题报告 惨 huayucaiji 惨 A. LCM Problem 赛前:A题嘛,总归简单的咯 赛后:A题这种**题居然想了20m ...

  2. codeforces 476C.Dreamoon and Sums 解题报告

    题目链接:http://codeforces.com/problemset/problem/476/C 题目意思:给出两个数:a 和 b,要求算出 (x/b) / (x%b) == k,其中 k 的取 ...

  3. Codeforces 263C. Appleman and Toastman

    C. Appleman and Toastman time limit per test  2 seconds memory limit per test  256 megabytes input  ...

  4. Codeforces Round #382 (Div. 2) 解题报告

    CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...

  5. codeforces 507B. Amr and Pins 解题报告

    题目链接:http://codeforces.com/problemset/problem/507/B 题目意思:给出圆的半径,以及圆心坐标和最终圆心要到达的坐标位置.问最少步数是多少.移动见下图.( ...

  6. codeforces 500B.New Year Permutation 解题报告

    题目链接:http://codeforces.com/problemset/problem/500/B 题目意思:给出一个含有 n 个数的排列:p1, p2, ..., pn-1, pn.紧接着是一个 ...

  7. codeforces B. Xenia and Ringroad 解题报告

    题目链接:http://codeforces.com/problemset/problem/339/B 题目理解不难,这句是解题的关键 In order to complete the i-th ta ...

  8. codeforces 460A Vasya and Socks 解题报告

    题目链接:http://codeforces.com/problemset/problem/460/A 题目意思:有一个人有 n 对袜子,每天早上会穿一对,然后当天的晚上就会扔掉,不过他会在 m 的倍 ...

  9. codeforces 567D.One-Dimensional Battle Ships 解题报告

    题目链接:http://codeforces.com/problemset/problem/567/D 题目意思:给出 1 * n 的 field,编号从左至右依次为 1,2,...,n.问射 m 枪 ...

随机推荐

  1. Leetcode 数组问题3:旋转数组

    问题描述: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 : 输入A数组: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释 ...

  2. Java-多态的理解(主要是解释一个网上经典的例子)

    如题,本文重点不在于介绍什么是多态,所以一些基础的概念就不多说了(需要知道的时候会提一下).要了解多态的话这里推荐一篇 http://www.cnblogs.com/jack204/archive/2 ...

  3. session再次理解

    1.session介绍: session主要用来存储用户的会话所需的信息(用户行为信息),当用户在同一个服务器上实现不同的操作时,session信息会以变量的形式存储在服务器的内存中,保存用户的状态信 ...

  4. 在谈MVP之前,你真的懂MVC吗?

    最近看到很多文章在谈论MVP或者MVVM模式的,但其实无论MVP还是MVVM都只是MVC模式的一种变种.而如果你对MVC的设计理念都还没有理解透彻,那么即使换成MVP亦或MVVM也不可能让你杂乱不堪的 ...

  5. G 全然背包

    <span style="color:#3333ff;">/* /* _________________________________________________ ...

  6. serialVersionUID的作用以及如何用idea自动生成实体类的serialVersionUID

    转载:http://blog.csdn.net/liuzongl2012/article/details/45168585 serialVersionUID的作用: 通过判断实体类的serialVer ...

  7. byte 单位换算

    1G就1GB啦,平时人们说1G只是简洁来说而已. bit(位).B(字节).K(千).M(兆).G(吉咖).T(太拉) B(Byte).KB(KiloByte).MB(MegaByte).GB(Gig ...

  8. 本机上使用Three.js载入纹理

    怎样载入纹理 // 首先, 创建一个纹理 var mapUrl = "../images/molumen_small_funny_angry_monster.jpg"; var m ...

  9. Android - Activity定制横屏(landscape)显示

    Activity定制横屏(landscape)显示 本文地址: http://blog.csdn.net/caroline_wendy Android横屏(landscape)显示:  android ...

  10. UVa11234 表达式

    题意:题目意思是给出后缀表达式.能够通过栈来计算表达式的值,即转化为中缀表达式. 然后如果如今不用栈.而是用队列来操作.即每遇到一操作符时.进行两次pop和一次push.(这里注意,先pop出来的作为 ...