【NOIP考前模拟赛】纯数学方法推导——旅行者问题
一、写在前面
这题似乎是一道原创题目(不是博主原创),所以并不能在任何OJ上评测,博主在网盘上上传了数据(网盘地址:http://pan.baidu.com/s/1mibdMXi),诸位看官需者自取。另外博主使用此题并没有获得出题人授权,如果出题人看到这篇blog并认为在下侵犯了您的权利,请用站内消息与在下联系,在下会立即删除这篇blog,给您带来的困扰之处敬请谅解。
博主上传这道题主要是因为这题牵扯许多数学运算,推导过程比较复杂,但是却没有用到任何算法或者数学定理,可以说这是一道想法题的典范。本篇blog中介绍的方法为博主原创,转载请标明出处。
二、题目
题目描述
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
样例提示
样例有6种可能的旅行:
[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.
答案为 1/6 * (5+7+7+8+9+8)=44/6=22/3
数据范围
30% n<=10
50% n<=1000
100% n<=100000
三、题目分析
首先,我们不妨抛开题目背景,将题目大致翻译成一个数学题:
给出一个正整数n,并给出a1、a2……an共n个互不相同的正整数。对于序列an的每一种排列ax1、ax2……axn,令Sx=|ax1-0|+|ax2-ax1|+……+|axn-axn-1|,求S的平均数。
由于题目明确说明,当i≠j时,不存在ai=aj的情况。那么,排列的总情况数就为n的全排列即n!种。
为了便于讲解,我们规定序列an严格升序(代码实现时只需要做一次sort处理)
通过对S的定义我们不难发现,若不考虑ai作为axn的情况,对于每个i,在每个求S的算式中,ai都会作为被减数和减数各出现一次。此外,由于当i=xn时,ai在算式中不作为减数出现,并且对于每个i,i=xn的情况各有(n-1)!种,所以对于每个i,ai总共作为被减数出现n!次,作为减数出现[n!-(n-1)!]次。
我们先讨论ai作为被减数出现的情况:
当ai作为被减数时,0和其余n-1个数都可以作为ai的减数,且他们成为ai的减数的机会是均等的(ai雨露均沾??)所以含0在内的n个数各会作为ai的减数(n-1)!次。设aj为ai的减数,那么当且仅当j<i时,|ai-aj|去绝对值符号后会得到ai-aj;反之,当且仅当j>i时,|ai-aj|去绝对值符号后会得到aj-ai。由于当i合法时,0总比ai小,所以我们可以得到有i个数使ai去绝对值符号之后带正号,n-i个数使ai去绝对值符号后带负号。
以上,我们整理后得到:ai作为被减数时对ΣS的影响为:

同理,我们讨论ai作为减数出现的情况:
当ai作为减数时,其余n-1个数都可以作为ai的被减数,且他们成为ai的被减数的机会是均等的(ai雨露均沾+1)所以其余n-1个数各会作为ai的减数(n-1)!次(想一想,为什么)。设aj为ai的被减数,那么同上,当且仅当j<i时,|aj-ai|去绝对值符号后会得到ai-aj;反之,当且仅当j>i时,|aj-ai|去绝对值符号后会得到aj-ai。所以我们可以得到有i-1个数使ai去绝对值符号之后带正号,n-i个数使ai去绝对值符号后带负号。
以上,我们整理后得到:ai作为减数时对ΣS的影响为:

综合以上两种情况,我们得到:ai对ΣS的影响为:

最后,我们只需要将每个ai对ΣS的影响结合起来,便得到了答案:

注意:1、记得将答案化简为最简分数后输出(分子、分母各除以其最大公约数);
2、不开long long见祖宗,十年OI一场空。
四、代码实现
#include<stdio.h>
#include<algorithm>
using namespace std;
const int MAXN=;
long long a[MAXN];
long long gcd(long long x,int n)
{
long long xx=x,yy=n;
while(yy)
{
long long t=xx%yy;
xx=yy;
yy=t;
}
return xx;
}
int main()
{
freopen("tourist.in","r",stdin);
freopen("tourist.out","w",stdout);
int n;
long long x=;
scanf("%d",&n);
int i;
for(i=;i<=n;++i)
scanf("%d",&a[i]);
sort(a+,a++n);
for(i=;i<=n;++i)
x=x+a[i]*(*i-*n-);
long long g=gcd(x,n);
printf("%lld ",x/g);
printf("%d\n",n/g);
fclose(stdin);
fclose(stdout);
return ;
}
旅行者问题
弱弱地说一句,本蒟蒻码字也不容易,转载请注明出处http://www.cnblogs.com/Maki-Nishikino/p/5994679.html
【NOIP考前模拟赛】纯数学方法推导——旅行者问题的更多相关文章
- NOIP前模拟赛总结
NOIP前模拟赛总结 from 2018.10.7 to ??? Date Name Score(Rank) Problems 2018.10.7 McfXH AK Contest 42(?) 期望得 ...
- NOIP一系列模拟赛小结
NOIP越发接近了,于是自己也跟着机房的几位师兄一起做了几次NOIP模拟赛,收获颇多. #1-T1:求点集中的点能否只用三条与坐标轴平行的直线就能全部被经过,其实只要将横纵坐标排序后逐个点检查下就行. ...
- NOIP欢乐模拟赛 T1 解题报告
小澳的方阵 (matrix.cpp/c/pas) [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑 ...
- 2017.11.8 Noip2017 考前模拟赛
----------------------------------T1---------------------------------- ——>足球联赛 题目描述 巴蜀中学新一季的足球联赛开 ...
- 2017.11.7 Noip2017 考前模拟赛
----------------------------------T1---------------------------------- ——>数学老师的报复 题目描述 11 班数学大佬 Y ...
- JXOJ 9.7 NOIP 放松模拟赛 总结
比赛链接 T1 数数 题意:有a个红球,b个黄球,c个蓝球,d个绿球排成一列,求任意相邻不同色的排列的数目 1 <= a , b, c, d <= 30 答案对1e9 + 7 取膜 用 ...
- LUOGU NOIP 2018 模拟赛 DAY1
T1 传送门 解题思路 这似乎是小学数学知识???mod 9就相当于各位之和mod 9,打表求了个逆元,等差数列求和公式就行了. #include<iostream> #include&l ...
- NOIP欢乐模拟赛 T3 解题报告
3.小澳的葫芦 (calabash.cpp/c/pas) [题目描述] 小澳最喜欢的歌曲就是<葫芦娃>. 一日表演唱歌,他尽了洪荒之力,唱响心中圣歌. 随之,小澳进入了葫芦世界. 葫芦世界 ...
- NOIP欢乐模拟赛 T2 解题报告
小澳的坐标系 (coordinate.cpp/c/pas) [题目描述] 小澳者表也,数学者景也,表动则景随矣. 小澳不喜欢数学,可数学却待小澳如初恋,小澳睡觉的时候也不放过. 小澳的梦境中出现了一个 ...
随机推荐
- go智能提示(重要)
使用VIM开发go程序时,智能提示是一个大问题. 最终解决方案是使用 YCM,它是使用 gocode 来进行智能提示的.一切配置好之后,你会发现标准库和第三方库都可以智能提示,但自己写的包却不能,猜想 ...
- linux零基础入门总结
啊,notepad++贴过来怎么对齐格式这么糟糕呢? #root用户 $普通用户 linux命令 清屏clear翻页清屏 CRT中ctrl+L reset"清空 CRT中不起作用 ...
- iphone如何导出微信聊天记录到电脑?
有个小美眉买了个iphone,但发现自己就是一小白,很多功能都不会用,微信倒是用得挺上手的,可以晚上聊到三四点,流量直接飙升500MB.最近她说手机太卡了,问ytkah帮她整一下.拿起她的IPhone ...
- h5 hdf5 文件转 tif 流程
由于需要对h5(hdf5)格式的dem数据进行拼接,但是arcgis不能识别h5的地理参考信息,所以先将h5文件转为带地理参考的tif文件,然后再进行拼接. 工具:arcgis+envi 1.用arc ...
- Visual Studio常用快捷键
1. 代码自动对齐:CTRL+K+F 2. 撤销---使用组合键“Ctrl+Z”进行撤销操作 3. 反撤销---使用组合键“Ctrl+Y”进行反撤销操作 4. 使用组合键“Ctrl+J”或者使用组合键 ...
- [解决WebClient或HttpWebRequest首次连接缓慢问题]
[编程环境]Visual Studio 2010, NET4.0 [开发语言]C#, 理论上VB.NET等依赖.NET Framework框架的语言均受此影响 [问题描述] 使用HttpWebRequ ...
- Wireshark抓包工具
首先下载并安装Wireshark软件,最好选择中文版,因为会使你用的更顺手. 安装完毕之后,双击打开Wireshark软件,主界面还是比较清晰明了的,可是怎么用还是稀里糊涂的吧. 点击菜单栏红圈中的选 ...
- Qt: 时钟Demo
其实是一个很简单的Demo,可以编译了拿NSIS打包.最近在做富文本编辑器和补C++不记得的东西吧,项目遥遥无期. //clock.pro #----------------------------- ...
- wow经典台词
永恒岛,磐皂在玄牛上场时喊:你能否独立山巅,任由风霜侵袭,直至沧海变为桑田,高山沉入海底?风刀霜剑,四面受敌.不动如山,亘古不移. 巫妖王:当一切结束,你会跪求我的宽恕...而我,会拒绝你! 伊利丹: ...
- android 第三方登录---新浪微博
1.AndroidManiFest.xml设置,这里我只是简单的用授权,获取基本信息,所以只用了这一个 <!--微博--> <!-- 必须注册在微博授权,分享微博时候用到 --> ...