题目链接: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 处理之!!!

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <algorithm>
  6. using namespace std;
  7.  
  8. typedef long long LL;
  9. const int maxn = 3e5 + ;
  10. LL a[maxn];
  11.  
  12. int main()
  13. {
  14. int n;
  15. while (scanf("%d", &n) != EOF)
  16. {
  17. LL s = ;
  18. for (int i = ; i <= n; i++)
  19. {
  20. scanf("%lld", &a[i]);
  21. s += a[i];
  22. }
  23. sort(a+, a++n);
  24. for (int i = ; i < n; i++)
  25. s += (LL) a[i] * (LL)i; // 因为之前算了一次总和,所以不是a[i]*(i+1)
  26. s += (LL)(n-)*(LL)a[n];
  27. printf("%lld\n", s);
  28. }
  29. return ;
  30. }

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. Ext.Ajax.request批量提交表单

    介绍一下批量提交grid中数据的问题 js文件中的提交方法如下: listeners: { click: function btnClick(button) { var win = button.up ...

  2. 转:PHP 生成复杂JSON格式 简单快速方法

    PHP 生成JSON 格式主要使用json_encode()函数.这个函数的输入参数支持PHP数组和对象类型. 查阅网上的例子通常都是使用数组的,也有个别使用对象生成.但实际项目中,我们要生成的JSO ...

  3. 第四章——SQLServer2008-2012资源及性能监控(1)专家

    http://blog.csdn.net/dba_huangzj/article/details/8614817

  4. erlang debugger

    http://erlang.org/doc/apps/debugger/debugger_chapter.html

  5. 我们为什么要把Dagger2,MVP以及Rxjava引入项目中?

    1Why? 我们为什么要把Dagger2,MVP以及Rxjava引入项目中? 毫无疑问在Android开发圈中这三个技术是经常被提及的,如此多的文章和开源项目在介绍他们,使用他们,开发者也或多或少的被 ...

  6. 最新最全的 Android 开源项目合集

    原文链接:https://github.com/opendigg/awesome-github-android-ui 在 Github 上做了一个很新的 Android 开发相关开源项目汇总,涉及到 ...

  7. 如何在Linux中使用sFTP上传或下载文件与文件夹

    如何在Linux中使用sFTP上传或下载文件与文件夹 sFTP(安全文件传输程序)是一种安全的交互式文件传输程序,其工作方式与 FTP(文件传输协议)类似. 然而,sFTP 比 FTP 更安全;它通过 ...

  8. vue2.0 自定义 提示框(Toast)组件

    1.自定义 提示框 组件 src / components / Toast / index.js /** * 自定义 提示框( Toast )组件 */ var Toast = {}; var sho ...

  9. MFC小程序02————— 不规则窗体小应用程序

    什么不说了.先上程序截图: 执行结果是有一棵有星星在闪烁的圣诞树.还会循环播放背景音乐. 之前也是在网上看到类似的一个程序.然后自己近期也在学MFC.所以就模仿着写了一个, 当中使用的是GDI+来显示 ...

  10. idea安装plugin

    ---恢复内容开始--- ---恢复内容结束---