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 枪 ...
随机推荐
- sed命令2
测试文件sedtest.txt,内容为: [root@localhost sed]# cat sedtest.txt my cat's name is betty it's a cat; this i ...
- 【jQuery】input textarea 文本变化的动态监听
实时监听Input textarea文本变化的监听事件:[但不包含通过js动态添加改变的文本事件] HTML: <textarea style="display: none" ...
- 转: linux下的自动对时
转自: http://www.cnblogs.com/vimmer/archive/2012/05/17/2505785.html 评注:date 命令格式为: date -s 2012-08-02 ...
- log4net报错Could not load type 'System.Security.Claims.ClaimsIdentity'
使用log4net,在win7上可以正常使用,但是在部分xp电脑上可以生成access数据库,但是无法写数据到mdb 排除了程序原因,怀疑是xp缺少什么dll之类的 偶然查到log4net的调试方法: ...
- 百科知识 tar文件如何打开
tar 是什么文件格式,是干什么用的,用什么打开 tarball压缩格式,源于Linux的一个指令,Windows上可以用WinRAR打开 Linux的实用程序tar最初是为了制作磁带存档而设计的(把 ...
- Odoo MRP 实际成本
Odoo MRP 8 对于 产成品并不支持 实际成本记账 本人开发了一个模块,支持此特性, 可以在 淘宝店铺 购买 https://item.taobao.com/item.htm?_u=85jr9d ...
- ElasticSearchserver操作命令
在win7环境,进入elasticsearch安装文件夹的bin文件夹: 1. elasticsearch.bat 就能够启动elasticsearch了.执行这个插件的优点是:elasticsear ...
- 2.Qt Creator的使用
下面以一个简单的程序来说明Qt Creator的使用: 首先,按图片步骤创建一个Qt项目 创建完成后 上图标记处工具栏提供了简化树形视图.分栏等功能(自行尝试吧...) 在使用Qt制作一个界面时,我们 ...
- kubernetes滚动更新
系列目录 简介 当kubernetes集群中的某个服务需要升级时,传统的做法是,先将要更新的服务下线,业务停止后再更新版本和配置,然后重新启动并提供服务.如果业务集群规模较大时,这个工作就变成了一个挑 ...
- npm 淘宝设置代理
直接安装cnpm导致无限索引,因此直接使用代理 方法一: 直接在当前用户文件夹下,npmrc 文件上直接设置代理:registry=https://registry.npm.taobao.org 方法 ...