问题描述
lahub是一个旅行者的粉丝,他想成为一个真正的旅行者,所以他计划开始一段旅行。lahub想去参观n个目的地(都在一条直道上)。lahub在起点开始他的旅行。第i个目的地和起点的距离为ai千米(ai为非负整数)。不存在两个目的地和起点的距离相同。

从第i个目的地走到第j个目的地所走的路程为 |ai-aj|千米。我们把参观n个目的地的顺序称作一次“旅行”。lahub可以参观他想要参观的任意顺序,但是每个目的地有且只能被参观一次(参观顺序为n的排列)。

lahub把所有可能的“旅行”都写在一张纸上,并且记下每个“旅行”所要走的路程。他对所有“旅行”的路程之和的平均值感兴趣。但是他觉得计算太枯燥了,所以就向你寻求帮助。
输入
第一行一个正整数n。

第二行n个非负整数a1,a2,….,an(1≤ai≤10^7)。
输出
两个整数,答案用最简分数形式输出,第一个为分子,第二个为分母。
样例输入
3

2 3 5
样例输出
22 3
算法讨论
考虑将这些路径拆成许多的两点间的路径,考虑两点间的路径对答案的贡献。
先考虑起点到Ai这种路径,这条路径确定之后,后面的路径方案就与这条路径无关,后面的方案数一共有 (n-1)!,由于它是单向边且不能改变位置,所以这种路径对路径和的贡献为(n-1)!*Ai。
现在考虑任意两点路径Ai,Aj,除了这两个点的其他的n-2个点方案总数为(n-2)!,而我们可以将这条路径插入在任意的一个位置,共有n-1个位置,故这条路径的方案总数为(n-2)!*(n-1)即(n-1)!,对路径和的贡献为(n-1)!*abs(Ai-Aj)。
所以路径和就转化为求(n-1)!Σabs(Ai-Aj)(1<=i,j<=N,i≠j)+(n-1)!ΣAi。
问题的关键就是求这Σabs(Ai-Aj)。
将所有的Ai排序后,实际上只要考虑从大的点往小的点走,最后路径和*2即可。
然后考虑如何计算:
假设a1 > a2 > a3 > a4,
以Ai为结尾的Ai-Aj的和为Si,
那么:
S2 = a1 - a2
S3 = a1 - a3 + a2 - a3 = (a1 - a2 + a2 - a3) + a2 - a3 = S2 + 2 *(a2 - a3)
S4 = a1 - a4 + a2 - a4 + a3 - a4 = (a1 - a3 + a3 - a4) + (a2 - a3 + a3 - a4) + (a3 - a4)
= S3 + 3 * (a3 - a4)
于是发现Si其实是可以递推的。
答案中分子的(n-1)!与分母的n!相约后只剩一个n,求出c=gcd(ans,n)再分别除以c输出即可。

#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxn 100001
long long a[maxn];
long long n;
long long s,s1,t;long long gcd(long long a,long long b)
{if (b==0)return a;elsegcd(b,a%b);
}long long read()
{long long x = 0, p = 1; char ch = getchar();while (ch < '0' || ch > '9') {if (ch == '-') p = -1; ch = getchar();}while (ch >= '0' && ch <= '9') {x = (x << 1) + (x << 3) + ch - '0'; ch = getchar();}return x * p;
}
void write(long long ans)
{if (ans >= 10)write(ans / 10);putchar(ans % 10 + '0');
}
int main()
{scanf("%lld",&n);for (int i=1;i<=n;i++){a[i] = read();s+=a[i];}sort(a+1,a+n+1);for (int i=1;i<=n;i++){s1+=a[i]*(i-1);s1-=a[i]*(n-i);}s+=s1*2;t=gcd(s,n);write(s/t);putchar(' ');write(n/t);
}


Pixiv ID:56805327

【2767】2017年10月10日提高组T1 xjh的旅行相关推荐

  1. SSL2668 2017年8月7日提高组T1 根(dfs)

    2017年8月7日提高组T1 根 Description 一天,小B得到了一棵n个节点的树.无聊至极的小B想要找出一个点,使得以这个点为根时,所有点的深度之和最大.但小B打开手机,发现他最爱的re:c ...

  2. SSL2811 2017年10月30日提高组T2 摘Galo(树形dp)

    2017年10月30日提高组T2 摘Galo Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有 ...

  3. SSL2793 2017年10月26日提高组T2 Deep(博弈)

    2017年10月26日提高组T2 Deep Description 失败的燃烧军团想要逃回深渊,Khadgar 想要追击它们. 然而进入深渊的传送门只有一座,燃烧军团和Khadgar 各有一些法力水晶 ...

  4. JZOJ6月20日提高组T1 小麦亩产一千八

    JZOJ6月20日提高组T1 小麦亩产一千八 题目 Description Input Output Sample Input Data Constraint 分析 Code 题目 Descripti ...

  5. 【NOIP2015模拟11.3晚】JZOJ7月31日提高组T1 次芝麻

    [NOIP2015模拟11.3晚]JZOJ7月31日提高组T1 次芝麻 题目 题解 题意 分析 Code 题目 题解 题意 给出两个数 x x x, y y y 每次操作会将小的数乘2,大的数减去小的 ...

  6. 【SSLGZ 2811】2017年10月30日提高组T2 摘Galo

    问题描述 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Galo,美味度为w ...

  7. 2017年10月23日提高组T2 灵知的太阳信仰 单调队列优化dp

    Description 在炽热的核熔炉中,居住着一位少女,名为灵乌路空. 据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量--核能. 核焰,可融真金. 咳咳. 每次核融的时候,空都会选取 ...

  8. 【SSLGZ 2812】2017年10月30日提高组T2 凤凰院真凶

    问题描述 输入 输出 第一行一个整数k,表示最长公共合法事件序列的长度. 样例输入 5 1 4 2 5 1 4 1 1 2 4 样例输出 2 数据范围 算法讨论 f[i][j]为a到第i个位置,b到第 ...

  9. 2020年10月30日提高组 B 超级蚯蚓

    文章目录 ResultResultResult HyperlinkHyperlinkHyperlink DescriptionDescriptionDescription SolutionSoluti ...

最新文章

  1. 返回顶部的js实现(jQuery/MooTools)
  2. svcagent32.exe,javaM.exe木马查杀解决方案 (转Ad0.cn)
  3. matlab结构阵列设计,ROM阵列及其版图结构的制作方法
  4. c++常见的排序表与复杂度
  5. go语音protobuf_golang 使用 protobuf 的教程
  6. span标签的鼠标滑入提示_彻底搞懂拖拽——基于鼠标事件的拖拽以及基于HTML5 API的拖拽...
  7. ecos中的spl同步机制
  8. 数字特征:矩 协方差矩阵
  9. 深入理解Java Proxy机制
  10. Java使用IntelliJ IDEA创建一个基于Swing的GUI图形化程序,打包发布为jar
  11. oracle学习资料大全
  12. 微粒群算法(PSO)
  13. 五线谱中蕴含的数学问题
  14. linux结合阿里云企业邮箱配置mailx
  15. HTML5期末大作业:关于家乡介绍主题网页设计——云南民族文化(8页) HTML+CSS+JavaScript 期末作业HTML代码 学生网页课程设计期末作业下载 web网页设计制作成品
  16. Excel批量修改数据透视表值字段设置
  17. onedriver -1T容量,edu邮箱申请。
  18. 蓝牙 4.0 ATT属性协议
  19. 计算机编程 计算存款利息,第8周项目5-定期存款利息计算器
  20. python反向切片_python切片

热门文章

  1. GIMPS梅森素数搜寻及相关算法综述
  2. oracle周转率报告,Oracle ERP系统维护经验谈
  3. 为西安地铁“让路” 47条公交线路有调整
  4. Java程序员面试笔试宝典刷题总结~11
  5. Win10启用/禁用【受控制文件夹的访问】
  6. Error: The superclass, ‘Animal‘, has no unnamed constructor that takes no arguments.
  7. dubbo学习篇1 注解之 @Reference 原理解析
  8. CT和MRI的局限性和克服措施
  9. 当图网络遇上计算机视觉!计算机视觉中基于图神经网络和图Transformer的方法和最新进展...
  10. 10个问题让你秒懂变压器!