codeforces 462C Appleman and Toastman 解题报告
题目链接: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 解题报告的更多相关文章
- Codeforces Educational Round 92 赛后解题报告(A-G)
Codeforces Educational Round 92 赛后解题报告 惨 huayucaiji 惨 A. LCM Problem 赛前:A题嘛,总归简单的咯 赛后:A题这种**题居然想了20m ...
- codeforces 476C.Dreamoon and Sums 解题报告
题目链接:http://codeforces.com/problemset/problem/476/C 题目意思:给出两个数:a 和 b,要求算出 (x/b) / (x%b) == k,其中 k 的取 ...
- Codeforces 263C. Appleman and Toastman
C. Appleman and Toastman time limit per test 2 seconds memory limit per test 256 megabytes input ...
- Codeforces Round #382 (Div. 2) 解题报告
CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...
- codeforces 507B. Amr and Pins 解题报告
题目链接:http://codeforces.com/problemset/problem/507/B 题目意思:给出圆的半径,以及圆心坐标和最终圆心要到达的坐标位置.问最少步数是多少.移动见下图.( ...
- codeforces 500B.New Year Permutation 解题报告
题目链接:http://codeforces.com/problemset/problem/500/B 题目意思:给出一个含有 n 个数的排列:p1, p2, ..., pn-1, pn.紧接着是一个 ...
- codeforces B. Xenia and Ringroad 解题报告
题目链接:http://codeforces.com/problemset/problem/339/B 题目理解不难,这句是解题的关键 In order to complete the i-th ta ...
- codeforces 460A Vasya and Socks 解题报告
题目链接:http://codeforces.com/problemset/problem/460/A 题目意思:有一个人有 n 对袜子,每天早上会穿一对,然后当天的晚上就会扔掉,不过他会在 m 的倍 ...
- codeforces 567D.One-Dimensional Battle Ships 解题报告
题目链接:http://codeforces.com/problemset/problem/567/D 题目意思:给出 1 * n 的 field,编号从左至右依次为 1,2,...,n.问射 m 枪 ...
随机推荐
- Java获取当前时间戳/时间戳转换
时间戳精度有两个概念:1是精确到秒,2是精确到毫秒. 要操作时间戳和时间戳转换为时间一般对应的对象就是Date,而Date各种转换离不开SimpleDateFormat: 如果是要获取时间指定的年月日 ...
- linux安装开源邮件服务器iredmail的方法:docker
直接安装的方法,参考网文,我不介绍.本文介绍的是快速的方法:docker 使用镜像源:https://hub.docker.com/r/lejmr/iredmail/,因为pull的数量最多 直接 d ...
- activiti自己定义流程之整合(二):使用angular js整合ueditor创建表单
基础环境搭建完成,接下来就该正式着手代码编写了,在说代码之前.我认为有必要先说明一下activit自己定义流程的操作. 抛开自己定义的表单不谈.通过之前的了解,我们知道一个新的流程開始.是在启动流程实 ...
- vue doubleclick 鼠标双击事件
Vue-dblclick事件(此外事件还有mouseover,mouseout,click,mousdown...): v-on:dblclick="函数" v-on:click/ ...
- DVBS/S2在数字电视系统中的应用 三 (LNB介绍)
DVBS/S2在数字电视系统中的应用 三 (LNB介绍) 老谢在前面两篇文章中(例如以下).都有提到LNB这一概念. DVBS/S2在数字电视系统中的应用 一 (DVBS/S2接收系统Block Di ...
- jsp网页在浏览器中不显示图片_eclipse环境下配置tomcat中jsp项目的虚拟路径
遇到的问题是这种,在jsp网页中嵌入了本地的图片,由于会用到上传到服务器的图片,所以没有放到项目里面,而是把全部图片单独放到一个文件夹里,然后打算使用绝对路径把要显示的图片显示出来.比方是放在了E盘的 ...
- HDU3572Task Schedule(最大流 ISAP比較快)建图方法不错
Task Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- 在A页面刷新父框架中的B页面.(window.parent.?.location="")
window.parent.leftFrame.location='left.jsp?menuid='+menu.id+'&menuname='+menu.title;
- Web开发者用什么编辑器?
写在前面的话:从事web前端开发也有一段时间了,今天主要想分享的是文字(代码)编辑器.对于编辑器每个人都有自己的偏爱,也分不同语言的编码者,这里我就拿我接触过的来说说吧! Web开发者用什么编辑器? ...
- Unity3D总结:关于射线碰撞
方法一:Physics.Raycast 光线投射 1.static function Raycast (origin : Vector3, direction : Vector3, distance ...