#23641: 規律


yes51851823@gmail.com (wseds)

學校 : 國立花蓮高級工業職業學校
編號 : 108813
來源 : [36.227.245.149]
最後登入時間 :
2024-04-16 01:11:16
f461. 現金兌換點卷 | From: [111.243.230.46] | 發表日期 : 2020-12-04 21:03

我們若不管輸入順序,不管輸入甚麼都先排序,假設輸入為1,2,3,4,5,6。

可以發現答案即為

(2-1)+(3-1)+(4-1)+(5-1)+(6-1)+(3-2)+(4-2)+(5-2)+(6-2)+(4-3)+(5-3)+(6-3)+(5-4)+(6-4)+(6-5)

去掉括號則變成 2-1+3-1+4-1+5-1+6-1+3-2+4-2+5-2+6-2+4-3+5-3+6-3+5-4+6-4+6-5

整合後可以發現,總共有-5個1、-3個2、-1個3、1個4、3個5、5個6。

如果觀察範例測資也會發現此規律,因此整理出:

若將輸入的數字先排序,最小的數總共會有1+N*(-1)個,最大的數總共會有N-1個。

由上可發現每個數字(已排序)的數量其實就是前一個數字的數量+2,將每個數字出現的次數乘以該數字後加總即可。

 
#23642: Re:規律


yes51851823@gmail.com (wseds)

學校 : 國立花蓮高級工業職業學校
編號 : 108813
來源 : [36.227.245.149]
最後登入時間 :
2024-04-16 01:11:16
f461. 現金兌換點卷 | From: [111.243.230.46] | 發表日期 : 2020-12-04 21:05

我們若不管輸入順序,不管輸入甚麼都先排序,假設輸入為1,2,3,4,5,6。

可以發現答案即為

(2-1)+(3-1)+(4-1)+(5-1)+(6-1)+(3-2)+(4-2)+(5-2)+(6-2)+(4-3)+(5-3)+(6-3)+(5-4)+(6-4)+(6-5)

去掉括號則變成 2-1+3-1+4-1+5-1+6-1+3-2+4-2+5-2+6-2+4-3+5-3+6-3+5-4+6-4+6-5

整合後可以發現,總共有-5個1、-3個2、-1個3、1個4、3個5、5個6。

如果觀察範例測資也會發現此規律,因此整理出:

若將輸入的數字先排序,最小的數總共會有1+N*(-1)個,最大的數總共會有N-1個。

由上可發現每個數字(已排序)的數量其實就是前一個數字的數量+2,將每個數字出現的次數乘以該數字後加總即可。


但要注意需要開long long,不然會溢位。

 
#23643: Re:規律


yp10871039 ( )

學校 : 臺北市私立延平高級中學
編號 : 104506
來源 : [111.241.151.42]
最後登入時間 :
2024-05-05 15:21:24
f461. 現金兌換點卷 | From: [111.241.166.142] | 發表日期 : 2020-12-04 22:43

我們若不管輸入順序,不管輸入甚麼都先排序,假設輸入為1,2,3,4,5,6。

可以發現答案即為

(2-1)+(3-1)+(4-1)+(5-1)+(6-1)+(3-2)+(4-2)+(5-2)+(6-2)+(4-3)+(5-3)+(6-3)+(5-4)+(6-4)+(6-5)

去掉括號則變成 2-1+3-1+4-1+5-1+6-1+3-2+4-2+5-2+6-2+4-3+5-3+6-3+5-4+6-4+6-5

整合後可以發現,總共有-5個1、-3個2、-1個3、1個4、3個5、5個6。

如果觀察範例測資也會發現此規律,因此整理出:

若將輸入的數字先排序,最小的數總共會有1+N*(-1)個,最大的數總共會有N-1個。

由上可發現每個數字(已排序)的數量其實就是前一個數字的數量+2,將每個數字出現的次數乘以該數字後加總即可。


我是先把數列排序(以範例一為例):

10 20 30 50

兩兩之間的差是:

10 10 20

將每種情況列出:

10            

10+10         10

10+10+20   10+20   20

可以整理成

第1個差*1*(項數-1)  + 第二個差*2*(項數-2) + 第3個差*3*(項數-3)

=> 10*1*3 + 10*2*2 +20*3*1

=> 30+40+60

=> 130

所以公式為:

D1*1*(n-1) + D2*2*(n-2) + ........ + Dn*n*1

(D為公差的數列,n為項數)

 
#23646: Re:規律


asnewchien@gmail.com (david)

學校 : 不指定學校
編號 : 68108
來源 : [114.42.146.197]
最後登入時間 :
2024-05-03 16:06:58
f461. 現金兌換點卷 | From: [61.223.42.32] | 發表日期 : 2020-12-05 11:35

能想出這樣的規律,真的很厲害。

 
#23651: Re:規律


SUNGOD (黑龍炎使.煞氣ㄟSUNGOD)

學校 : 國立交通大學
編號 : 95834
來源 : [140.113.213.76]
最後登入時間 :
2023-09-25 22:02:42
f461. 現金兌換點卷 | From: [118.166.198.243] | 發表日期 : 2020-12-05 21:34

我們若不管輸入順序,不管輸入甚麼都先排序,假設輸入為1,2,3,4,5,6。

可以發現答案即為

(2-1)+(3-1)+(4-1)+(5-1)+(6-1)+(3-2)+(4-2)+(5-2)+(6-2)+(4-3)+(5-3)+(6-3)+(5-4)+(6-4)+(6-5)

去掉括號則變成 2-1+3-1+4-1+5-1+6-1+3-2+4-2+5-2+6-2+4-3+5-3+6-3+5-4+6-4+6-5

整合後可以發現,總共有-5個1、-3個2、-1個3、1個4、3個5、5個6。

如果觀察範例測資也會發現此規律,因此整理出:

若將輸入的數字先排序,最小的數總共會有1+N*(-1)個,最大的數總共會有N-1個。

由上可發現每個數字(已排序)的數量其實就是前一個數字的數量+2,將每個數字出現的次數乘以該數字後加總即可。


我一開始用這方法卡tle,所以後來把式子化簡了一下,想說乘法少一點看有沒有差(畢竟nlog(n)的排序感覺還是偏肥的)

發現首先頭尾可以合併(第i項跟第n-i-1項)

變成(6-1)*5+(5-2)*3+(4-3)*1

然後可以發現該式相當於

(4-3+5-2+6-1)*1+(5-2+6-1)*2+(6-1)*2

也就是((6-1)+((6-1)+(5-2))+((6-1)+(5-2)+(4-3)))*2 - ((6-1)+(5-2)+(4-3))

令DP[i]表示到第i項之前的首尾相減總和(i<n/2)

最後DP全項加總後-DP[n/2-1]即為所求

PS.自己注意n%2==1跟n%2==0的差別

然後還真的就壓秒過了

AC (1.9s, 848KB)

然後很悲劇的發現最肥的還是i/o

優化之後穩穩的很難過(sad),所以就來這裡發心得了

 
#23653: Re:規律


yes51851823@gmail.com (wseds)

學校 : 國立花蓮高級工業職業學校
編號 : 108813
來源 : [36.227.245.149]
最後登入時間 :
2024-04-16 01:11:16
f461. 現金兌換點卷 | From: [111.243.230.46] | 發表日期 : 2020-12-05 23:03

我們若不管輸入順序,不管輸入甚麼都先排序,假設輸入為1,2,3,4,5,6。

可以發現答案即為

(2-1)+(3-1)+(4-1)+(5-1)+(6-1)+(3-2)+(4-2)+(5-2)+(6-2)+(4-3)+(5-3)+(6-3)+(5-4)+(6-4)+(6-5)

去掉括號則變成 2-1+3-1+4-1+5-1+6-1+3-2+4-2+5-2+6-2+4-3+5-3+6-3+5-4+6-4+6-5

整合後可以發現,總共有-5個1、-3個2、-1個3、1個4、3個5、5個6。

如果觀察範例測資也會發現此規律,因此整理出:

若將輸入的數字先排序,最小的數總共會有1+N*(-1)個,最大的數總共會有N-1個。

由上可發現每個數字(已排序)的數量其實就是前一個數字的數量+2,將每個數字出現的次數乘以該數字後加總即可。


我一開始用這方法卡tle,所以後來把式子化簡了一下,想說乘法少一點看有沒有差(畢竟nlog(n)的排序感覺還是偏肥的)

發現首先頭尾可以合併(第i項跟第n-i-1項)

變成(6-1)*5+(5-2)*3+(4-3)*1

然後可以發現該式相當於

(4-3+5-2+6-1)*1+(5-2+6-1)*2+(6-1)*2

也就是((6-1)+((6-1)+(5-2))+((6-1)+(5-2)+(4-3)))*2 - ((6-1)+(5-2)+(4-3))

令DP[i]表示到第i項之前的首尾相減總和(i<n/2)

最後DP全項加總後-DP[n/2-1]即為所求

PS.自己注意n%2==1跟n%2==0的差別

然後還真的就壓秒過了

AC (1.9s, 848KB)

然後很悲劇的發現最肥的還是i/o

優化之後穩穩的很難過(sad),所以就來這裡發心得了

其實這題的IO用scanf和printf就很足夠了XDD

 
ZeroJudge Forum