【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一場空。

四、代碼實現

 1 #include<stdio.h>
 2 #include<algorithm>
 3 using namespace std;
 4 const int MAXN=100010;
 5 long long a[MAXN];
 6 long long gcd(long long x,int n)
 7 {
 8     long long xx=x,yy=n;
 9     while(yy)
10     {
11         long long t=xx%yy;
12         xx=yy;
13         yy=t;
14     }
15     return xx;
16 }
17 int main()
18 {
19     freopen("tourist.in","r",stdin);
20     freopen("tourist.out","w",stdout);
21     int n;
22     long long x=0;
23     scanf("%d",&n);
24     int i;
25     for(i=1;i<=n;++i)
26         scanf("%d",&a[i]);
27     sort(a+1,a+1+n);
28     for(i=1;i<=n;++i)
29         x=x+a[i]*(4*i-2*n-1);
30     long long g=gcd(x,n);
31     printf("%lld ",x/g);
32     printf("%d\n",n/g);
33     fclose(stdin);
34     fclose(stdout);
35     return 0;
36 }
旅行者問題

弱弱地說一句,本蒟蒻碼字也不容易,轉載請注明出處http://www.cnblogs.com/Maki-Nishikino/p/5994679.html

轉載于:https://www.cnblogs.com/Maki-Nishikino/p/5994679.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457745.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457745.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457745.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu 配置靜態ip

先獲取root權限: sudo su ubuntu 靜態ip配置文件在 /etc/netplan/01-network-manager-all.yaml 文件初始內容可能是 # Let NetworkManager manage all devices on this system network: version: 2 renderer: NetworkManager 沒有網卡配置信息 需要加入網卡配置項…

python中none是什么類型_如何在Python中”測試”None類型?

我有一個方法&#xff0c;它有時返回一個非類型的值。那么我怎樣才能質疑一個非類型的變量呢&#xff1f;例如&#xff0c;我需要使用if方法if not new:new #我知道這是錯誤的方式&#xff0c;我希望你理解我的意思。我想這是在這里回答的&#xff0c;顯然是在以前的某個地方。…

C++ 一個文件調用另一個文件的函數模板

筆記 實驗得出 函數模板只能被本文件調用&#xff0c;這一點與inline函數和靜態函數相似 &#xff0c;如果函數模板可能被其他文件調用 可以把函數模板定義在頭文件中。與inline函數相同&#xff0c;在不同文件可以定義同名同模板列表同函數參數的函數模板&#xff0c;甚至函數…

GO 語言筆記

使用 Visual Studio Code 開發環境配置請看 http://studygolang.com/articles/8851 為什么要使用Go 語言&#xff1f;Go 語言的優勢在哪里&#xff1f; - Go 語言- 知乎 請看 https://www.zhihu.com/question/21409296 基礎入門看官網 https://golang.org/ & 無聞 http…

python os讀取文件名_Python3基礎 os.path.splitext 處理文件名,得到文件名+擴展名

Python : 3.7.0OS : Ubuntu 18.04.1 LTSIDE : PyCharm 2018.2.4Conda : 4.5.11typesetting : Markdowncode"""Author : 行初心Date : 18-10-2Blog : www.cnblogs.com/xingchuxinGitee : gitee.com/zhichengjiu"""import osdef main():file_name_…

自己寫的幾個常用到的函數

<?php /* * 生成指定數量和指定字符串生成隨機字符串 * param int $len 獲取隨機字符的個數 * param string $range 指定在該字符串中獲取隨機字符 */ function randomString($len,$range){ if($range ){ $str 0123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNP…

我有話說

歡迎留言&#xff01;

qtreewidget 獲取根節點_詳解去中心化信任根dRoT技術

近日&#xff0c;第21屆國際信息與通信安全會議(ICICS 2019)在北京召開。ICICS是國際公認的網絡與信息安全類頂級學術會議&#xff0c;匯聚了國內外諸多信息安全專家與學術泰斗。本屆ICICS 2019會議圍繞信息與網絡安全技術的各個方面展開深入研討&#xff0c;議題涵蓋了區塊鏈、…

反向代理服務器的工作原理

http://blog.csdn.net/keyeagle/article/details/6723408轉載于:https://www.cnblogs.com/figofifa/p/5604407.html

Linux命令:bash腳本編程--腳本

練習&#xff1a;寫一個腳本adminuser33.sh&#xff0c;其用法格式為&#xff1a;adminuser33.sh --add -del -h|--help -v|--verbose其中&#xff0c;-h選項只能單獨使用&#xff0c;用于顯示幫助信息&#xff1b;--add選項時&#xff0c;新增用戶&#xff1b;如果同時使用了-…

python實參_python的形參和實參

Python中函數參數的傳遞是通過“賦值”來傳遞的。但這條規則只回答了函數參數傳遞的“戰略問題”&#xff0c;并沒有回答“戰術問題”&#xff0c;也就說沒有回答怎么賦值的問題。函數參數的使用可以分為兩個方面&#xff0c;一是函數參數如何定義&#xff0c;二是函數在調用時…

校招碎碎念

前兩天拿了去哪兒(Qunar)的offer&#xff0c;不打算接著找了&#xff0c;心累&#xff0c;結束我的校招生涯吧&#xff0c;寫寫這段時間的經歷。 本科生一只&#xff0c;普通一本&#xff0c;非211/985學校&#xff0c;出了省就沒人認那種&#xff0c;計算機專業&#xff0c;目…

pyQuery

pyquery – PyQuery complete API 選擇器基本支持jQuery用法 class pyquery.pyquery.PyQuery(*args, **kwargs)The main class class FnHook for defining custom function (like the jQuery.fn): >>> fn lambda: this.map(lambda i, el: PyQuery(this).outerHtml())…

python配置pip_Python pip源配置

pipy國內鏡像目前有&#xff1a;Win7下配置pip源&#xff1a;1、在win7用戶目錄下創建pip目錄&#xff0c;以用戶user為例&#xff1a;C:\Users\user\pip2、在pip目錄下新建pip.ini文件&#xff1a;C:\Users\user\pip\pip.ini3、配置文件內容&#xff1a;以下是一個簡單的配置示…

Github Pages建立個人博客

使用Github Pages可以建立個人博客。官方教程&#xff1a;https://pages.github.com/步驟&#xff08;以下步驟中假設用戶名為username&#xff09;&#xff1a;1.建立一個項目&#xff0c;項目名為username.github.io2.初始化項目&#xff0c;上傳網頁代碼到github。轉載于:ht…

判斷該網頁是在什么設備打開。

為什么80%的碼農都做不了架構師&#xff1f;>>> <script type"text/javascript"> //判斷訪問終端 var browser{versions:function(){var u navigator.userAgent, app navigator.appVersion;return {trident: u.indexOf(Trident) > -1, //IE內…

python變量和常量_python變量與常量內容:

python變量與常量內容:# 變量&#xff1a;定義世間萬物變化的狀態height 180weight 140age 18tree_name yuyang# print(180)height 180print(height:, height)weight 140print(weight:, weight)age 18print(age:, age)tree_name yuyangprint(tree_name:, tree_name)# 變量的…

EF二級緩存

https://efcache.codeplex.com/ 轉載于:https://www.cnblogs.com/shiningrise/p/5612941.html

python wordpress xmlrpc_python-markdown自動發送wordpress文章(python-xmlrpc-wordpress)

一直熱衷使用Markdown&#xff0c;使用了圖床&#xff0c;以及多款的MD編輯器。wp的后臺太重了&#xff0c;又不想轉 hexo git &#xff0c;對于文章上傳至博客&#xff0c;總想辦法折騰怎么上傳wordprss。之前的解決辦法就是&#xff0c;直接將MD編輯器生成的html復制到wordp…

Android 5.1 - 狀態欄充電標志問題

Android 5.1 Ubuntu14.04 SourceInsigh電量已滿&#xff0c;插著USB頭&#xff0c;觀察Settings - Battery&#xff0c;電量為100%&#xff0c;狀態為full&#xff0c;但仍有充電圖標rust之前有讀過關于StatusBar的代碼。這次直接用SourceInsight找到 StatusBarHeaderView.jav…