资源限制

时间限制:1.0s   内存限制:256.0MB

问题描述

  在一条笔直的公路上有n个景点,第i个景点在Ai千米处,起点在0千米处,所有景点都位于起点一侧。
  八云紫(咦这是怎么中枪的?)从起点出发,每次任选一个没有游览的景点,从当前位置出发到达那个景点游览,这样进行n次,直到停在最后游览的那个景点。(最后不会回到起点。)
  在x千米处的点与在y千米处的点的路程为|x-y|千米。八云紫平均的总游览路程是多少?(她选择所有游览路线的概率是相等的,你可以认为这个概率等于1/n!。)

输入格式

  第一行一个数n,第二行n个数A1, A2 ... An,如题目所述。

输出格式

  输出一行,两个数,答案的分子和分母。要求分子分母不能再约分。

样例输入

3
2 3 5

样例输出

22 3

数据规模和约定

  2<n<100000,1≤Ai<10^7,对于任意1≤i<n,都有Ai<A(i+1)。

样例说明

  可能的游览顺序与对应的总路程:
  [2, 3, 5]: |2 – 0| + |3 – 2| + |5 – 3| = 5;
  [2, 5, 3]: |2 – 0| + |5 – 2| + |3 – 5| = 7;
  [3, 2, 5]: |3 – 0| + |2 – 3| + |5 – 2| = 7;
  [3, 5, 2]: |3 – 0| + |5 – 3| + |2 – 5| = 8;
  [5, 2, 3]: |5 – 0| + |2 – 5| + |3 – 2| = 9;
  [5, 3, 2]: |5 – 0| + |3 – 5| + |2 – 3| = 8.

  平均路程:(5+7+7+8+9+8)/6 = 22/3。

本题乍一看,似乎要计算很大的数字又或是要循环很多次。但是其实拆解一下就会发现其实很简单没那么复杂(关键是拆解绝对值的时候找规律)。

首先,我们可以把以上所有绝对值的和看成两类,一类是a[i]之间相减(例如3 - 2, 5 - 3), 另外一类是与原点的距离(例如2 - 0, 3 - 0)。计算算第一类的时候,我们发现其实有很多的重复的量,比如说3 - 2和2 - 3,去绝对值后都是一样的,所以我们先去其中的不重复的一组,然后再计算有多少相同的组即可。拿出一组来分析时,容易想到第一个数在计算的时候要被后面的所有的数减一遍(数组按顺序排列,所以第一个数一定是最小的,取绝对值的时候前面一定是负号),而最后的一个数也要减去前面所有的数一遍,这个时候我们就有了(n - 1)a[n], 和负的(n - 1)[a[1],前面的系数都是n - 1。继续,到a[2], 这时会有一个a[2] - a[1], 以及a[i] - a[2](2 < i <= n), 所以会减掉n - 3 个a[2], 同理会加上n - 3个a[n - 1]......,依次类推可以得到所有的和s1。

再来看有多少个s1,其实也就是看当两个数凑在一起的时候有多少种排列方式。比如样例中的3,5两个点,只要这两个点在游览的时候是紧接着的,就一定会有一个5 - 3出现,而且此时5和3可以调换位置(因为要取绝对值)。而由排列组合的知识知道两个数紧挨在一起时的排列方式有(n - 1) ! 种(也就是n - 1个元素进行全排列),而再加上可以调换顺序还需要乘以2,则第一类的和为2(n - 1) ! s1。

接下来第二类就很容易了,首先看样例很容易发现2 - 0,3 - 0, 5 - 0 都有两个,实际上只要固定一个数在第一个,而后有几种排列方式就有几个a[i] - 0(1<= i <= n), 也就是有几倍数列的和,计算一下便知道有(n - 1)!种排列,也就是s2  = (n - 1)! * sum(a)。注意到没有?s = s2 + 2(n - 1) ! s1 = (n - 1)! (sum(a)+2s1).

而总的排列方式为n!,一除就只剩下了一个n(都含有一个(n - 1) ! ), 而分子就只剩下了(sum(a)+2s1)。大功告成!至于怎么得到最后的结果,也就是化简到不能再约分。只要把每一个数除以最大公约数即可。接下来上代码:

def simplify(a, b):while a % b:t = a % ba, b = b, treturn bn = int(input().rstrip())
a = [int(i) for i in input().rstrip().split(' ')]  # 表示每一个景点的位置
s2, s1, count = sum(a), 0, 0  # count用来表示元素的下标
for i in range(n - 1, -1, -2):   # 步长为2,(下限设置为0也可以,加上一个0等于没加)s1 += i * (a[n - 1 - count] - a[count])count += 1
x, f = 2 * s1 + s2, n  # 直接利用推导的结论
m = simplify(x, f)
print(x // m, f // m)

蓝桥杯 游览计划 (Python实现)相关推荐

  1. 2020年第十一届蓝桥杯 - 国赛 - Python大学组 - H.答疑

    题目链接 Ideas 2020年第十一届蓝桥杯 - 国赛 - Python大学组 - H.答疑 Code Python if __name__ == '__main__':n = int(input( ...

  2. 蓝桥杯龟兔赛跑预测Python(超详细!!)

    蓝桥杯龟兔赛跑预测Python 问题描述(简单描述) 龟兔赛跑,跑道长l米,如果兔子比乌龟快t米,兔就会停下来休息s秒,有一者到达终点则停止比赛. 兔子速度为v1,乌龟速度为v2,输入v1.v2.t. ...

  3. 2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解

    2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解 文章目录 2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解 试题 F:时间显示 题目描述 输入描述 输出描述 输入输出 ...

  4. 蓝桥杯算法(python)

    蓝桥杯第三级别--算法. 蓝桥杯的考察重点:加黑重点 (括号内了解) 算法:枚举.排序.搜索.计数.贪心.动态规划.图论.数论.博弈论.概率论.计算几何.字符串算法.(递归.二分查找.哈希算法.分治算 ...

  5. 第十三届蓝桥杯省赛 python B组复盘(三道代码题全AC居然省一了)

    第十三届蓝桥杯省赛 python B组复盘(三道代码题全AC居然省一了)

  6. 蓝桥杯 日志统计 Python

    蓝桥杯 日志统计 Python 一.题目 输入格式 输出格式 样例输入 样例输出 二.Python代码 总结 提示:以下是本篇文章正文内容,下面案例可供参考 一.题目 小明维护着一个程序员论坛.现在他 ...

  7. 第十三届蓝桥杯省赛python(B组)赛后总结

    前言:这次蓝桥杯比赛,我获得了python组的二等奖(下图中最后一行是我,差几名拿省一).其实能获得这个成绩也算意料之外,情理之中吧.赛前也挺迷茫,自己到底能不能获奖,已经大三下了,还要准备考教资,找 ...

  8. 2020年软件类第十一届蓝桥杯 省赛 python组(人生苦短,我用python)

    2020年软件类第十一届蓝桥杯 省赛 python组 题解 文章目录 2020年软件类第十一届蓝桥杯 省赛 python组 题解 试题 A: 门牌制作 试题 B: 寻找 2020 试题 C: 跑步训练 ...

  9. 蓝桥杯 分巧克力 python

    蓝桥杯 分巧克力 python 题目标题 儿童节那天有K位小朋友到小明家做客.小明拿出了珍藏的巧克力招待小朋友们. 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形. 为了公平起见, ...

最新文章

  1. SSE4.1和SSE4.2 Intrinsics各函数介绍
  2. Java面试题及答案整理(2022最新版) 持续更新
  3. 第一次作业:艰难的计算机之路
  4. string::size_type
  5. Asp.net高效导出excel篇之Aspose导出excel
  6. bzoj 1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富(DP)
  7. html5 datalist 选中option选项后的触发事件
  8. Jenkins 部署 jmeter + Ant
  9. x[:,n]或者x[n,:]的用法
  10. TSC TTP-244 Pro标签打印机安装说明
  11. 对DSP的基本了解(二)--DSP的软硬件环境
  12. 第五章 课后习题(P139-140)
  13. 【数论】整除分块(数论分块)
  14. 原生js制作扫雷-自定义难度
  15. 相机计算坐标公式_相机采样点的坐标转换方法与流程
  16. 手机号码段及归属地查询规则
  17. 2021年美容师(初级)考试总结及美容师(初级)考试试题
  18. MOXA串口服务器6450串口引脚图
  19. android arouter原理和作用,ARouter原理剖析
  20. X射线掠入射聚焦反射镜

热门文章

  1. 医院智能导航服务,快速提升就诊效率
  2. 【论文阅读】GRAPH-BASED RECURRENT RETRIEVER
  3. 外贸软件车辆汽配行业解决方案
  4. 为什么一般数据恢复软件恢复的MDF文件无法附加
  5. 36岁的联想,像极了109岁的IBM?
  6. GRSTAR真的是投资?
  7. 关于投篮的数学建模模型_投篮问题的数学建模
  8. java dataconvert_Spring类型转换 ConversionSerivce Convertor解析
  9. 软件开发 签合同问题 需要注意什么
  10. 【转载】刷百度空间访问量、极速提升访问数、有图、有软件、下载