1. 程式人生 > >5921. 【NOIP2018模擬10.22】種花

5921. 【NOIP2018模擬10.22】種花

題目大意

在這裡插入圖片描述
因為找不到題面所以就勉為騎♂男C了一張下來

思路

因為題目要求的是最後的總和,所以可以分開每一對a[i]和a[j]來考慮,計算每一對的貢獻
對於每一對數,考慮其位置和出現次數,可以分成幾類出現次數相同的來討論
那麼每一類的貢獻就是
(距離1+距離2+……)*出現次數*(a[i]-a[j])=距離之和*每一對的出現次數*(a[i]-a[j])
a[i]-a[j]可以放到最後再乘

分類討論

設b[p[i]]表示p[i]在原序列的位置i,列舉a[i]和a[j]的具體數值,然後考慮ij在原序列上的位置(i<j 且 a[i]>a[j]且a[i]!=p[i]且a[j]!=p[j])
(下文為了方便直接用i表示a[i],j表示a[j],也就是i>j且i的位置在j前,同時上面的條件變成了i的位置!=b[i] 且 j的位置!=b[j])

先設f[n]表示當有n個數時的錯排數(就是著名的錯排公式
f [ n ] = ( n 1

) ( f [ n 1 ] + f [
n 2 ] ) f[n]=(n-1)(f[n-1]+f[n-2])
其中f[0]=1,f[1]=0

解釋一下
對於每個新加入的數n,首先不能將其放在自己的位置上
所以就要和前面(n-1)個數中的一個交換
對於交換出來的數,如果直接將其放在n,那其它的數就不收影響,就是f[n-2]
如果不放在n,也就相當於這個數原來在n時的錯排(因為錯排就是每個數不能放在自己的位置,其它數不放在自己的位置上,交換的數也不放在n上,就相當於該數原本就在n上,但由於錯排不能放在上面),也就是f[n-1]
所以
f [ n ] = ( n 1 ) ( f [ n 1 ] + f [ n 2 ] ) f[n]=(n-1)(f[n-1]+f[n-2])
f [ 0 ] f[0] 由於沒有所以為1
f [ 1 ] f[1] 由於不存在所以為0

i和j一定有至少一個在b[i]或b[j]上

b[i]<b[j]

那麼就只可能j在b[i]上,i在b[j]上

j在b[i]上

在這裡插入圖片描述
那麼j固定了,i可以在1~b[i]-1的任意一個位置(因為i的位置<j的位置,所以i不可能到b[i])
然後出現次數類似於錯排公式,i可以在1~b[i]-1的任意一個位置上,將該位置上的數可以放到b[j]或不放b[j]
放的話就直接是f[n-3],不放的話就是f[n-2](等於原來在b[j]上但現在不能放在原位,就是n-2的錯排)
所以該種情況的貢獻為
( b [ i ] ( b [ i ] 1 ) / 2 ) ( f [ n 3 ] + f [ n 2 ] ) (b[i]*(b[i]-1)/2)*(f[n-3]+f[n-2])
(不用乘以b[i]-1是因為錯排公式中每種情況的權值為1,所以要乘上去,但現在每種情況的權值為其長度,已在之前計算過。實際就是求每一對(ij都已固定)的出現次數)

i在b[j]上

在這裡插入圖片描述
那麼j可以在b[j]+1~n的任意位置,大致同上
所以該種情況的貢獻為
( 1 + n b [ j ] ) ( n b [ j ] ) / 2 ) ( f [ n 3 ] + f [ n 2 ] ) (1+n-b[j])*(n-b[j])/2)*(f[n-3]+f[n-2])

b[j]<b[i]

i在b[j]上,j在b[i]上

在這裡插入圖片描述
顯然,其它n-2個數與ij沒有關係
所以貢獻就是
( b [ i ] b [ j ] ) f [ n 2 ] (b[i]-b[j])*f[n-2]

j在b[i]上,且i不在b[j]上

在這裡插入圖片描述
因為i不在b[j]上,所以長度總和=1~b[i]-1的和-(b[i]-b[j])(就是除掉i在b[j]上的情況)
然後次數和之前類似,也是f[n-3]+f[n-2]
所以貢獻為
( b [ i ] ( b [ i ] 1 ) / 2 ( b [ i ] b [ j ] ) ) ( f [ n 3 ] + f [ n 2 ] ) (b[i]*(b[i]-1)/2-(b[i]-b[j]))*(f[n-3]+f[n-2])

i在b[j]上,且j不在b[i]上

在這裡插入圖片描述
同上。
( ( 1 + n b [ j ] ) ( n b [ j ] ) / 2 ( b [ i ] b [ j ] ) ) ( f [ n 3 ] + f [ n 2 ] ) ((1+n-b[j])*(n-b[j])/2-(b[i]-b[j]))*(f[n-3]+f[n-2])

i和j都不在b[i]和b[j]上

求總和

考慮用容斥求總和。
首先可以O(n)算出總的長度和,再減去所有不合法的情況
不合法的情況是ij中有至少一個在b[i]或b[j]上的4種情況
然後發現b[i]~b[j]這一段被減了兩次,要再加回去
設l為min(b[i],b[j]),r為max(b[i],b[j]),則總和就是
s u m ( r ( r 1 ) / 2 ) ( ( 1 + n l ) ( n l ) / 2 ) ( l ( l 1 ) / 2 ) ( ( 1 + n r ) ( n r ) / 2 ) + ( r l ) sum-(r*(r-1)/2)-((1+n-l)*(n-l)/2)-(l*(l-1)/2)-((1+n-r)*(n-r)/2)+(r-l)
然後實際和lr的順序每多大關係,可以再優化(見最終程式碼)

那麼對於每一對ij,考慮換出來的兩個數的位置

有兩個數在b[i]b[j]上

那麼顯然,就是f[n-4]
但因為換出來的數可以交換,所以實際上是
f [ n 4 ] 2 f[n-4]*2

有一個數在b[i]b[j]上

也很顯然,就是f[n-3](另一個數不在另一個位置上)
但實際上有4(兩個數*兩個位置)種情況,貢獻為
f [ n 3 ] 4 f[n-3]*4

一個數都不在b[i]b[j]上

由於這個問題過於哲♂學所以先不討論

another problem

考慮另一個問題:
求在長度為n的錯排下,有兩個數不能放入另外兩個位置中的任意一個
還是考慮容斥,設這兩個數為i和j且ij都在其原來的位置上,則不合法的情況有
在這裡插入圖片描述
(X表示另一個數不在該位置)
由於是錯排,首先加上f[n]
在這裡插入圖片描述
那麼所有i和j在原位的情況都被考慮了
然後減去f[n-1]*2,也就是ij有一個在上面的情況
在這裡插入圖片描述
最後減去f[n-2],也就是兩個都在上面的情況
在這裡插入圖片描述
所以最終的答案為
f [ n ] f[n] - f [ n 1 ] 2 f[n-1]*2 - f [ n 2 ] f[n-2]

原來的問題

因為原來的i和j都已被固定,所以就相當於上面長度為(n-2)時的問題
所以貢獻為
f [ n 2 ] f [ n 3 ] 2 f [ n 4 ] f[n-2]-f[n-3]*2-f[n-4]
真是奇♂妙

所以這一種情況的貢獻為
( s u m ( r ( r 1 ) / 2 ) ( ( 1 + n l ) ( n l ) / 2 ) ( l ( l 1 ) / 2 ) ( ( 1 + n r ) ( n r ) / 2 ) + ( r l ) ) ( f [ n 4 ] 2 + f [ n 3 ] 4 + ( f [ n 2 ] f [ n 3 ] 2 f [ n 4 ] ) ) (sum-(r*(r-1)/2)-((1+n-l)*(n-l)/2)-(l*(l-1)/2)-((1+n-r)*(n-r)/2)+(r-l))*(f[n-4]*2+f[n-3]*4+(f[n-2]-f[n-3]*2-f[n-4]))

相關推薦

JZOJ-senior-5921. NOIP2018模擬10.22種花

Time Limits: 2000 ms Memory Limits: 524288 KB Description 院子落葉,跟我的思念厚厚一疊;窗臺蝴蝶,像詩裡紛飛的美麗章節…… Input 小 H

5921. NOIP2018模擬10.22種花

題目大意 因為找不到題面所以就勉為騎♂男C了一張下來 思路 因為題目要求的是最後的總和,所以可以分開每一對a[i]和a[j]來考慮,計算每一對的貢獻 對於每一對數,考慮其位置和出現次數,可以分成幾類出現次數相同的來討論 那麼每一類的貢獻就是 (距離1+距離2+……)*出現次

JZOJ-senior-5921. NOIP2018模擬10.21種花

Time Limits: 2000 ms Memory Limits: 524288 KB Description 院子落葉,跟我的思念厚厚一疊;窗臺蝴蝶,像詩裡紛飛的美麗章節…… Input 小 H 是一個喜歡養花的女孩子。 她買了 n 株花,編號為一里香,二里香…

jzoj5919. NOIP2018模擬10.22逛公園(tarjan,二分)

5919. 【NOIP2018模擬10.22】逛公園 Description 琥珀色黃昏像糖在很美的遠方,思念跟影子在傍晚一起被拉長…… Description 小 B 帶著 GF 去逛公園,公園一共有 n 個景點,標號為 1 . . . n。景點之間有 m

JZOJ5919. NOIP2018模擬10.22逛公園

Description 小 B 帶著 GF 去逛公園,公園一共有 n 個景點,標號為 1 . . . n。景點之間有 m 條路徑相連。 小 B 想選擇編號在一段區間 [l, r] 內的景點來遊玩,但是如果這些景點的誘導子圖形成了環,那麼 GF 將會不高興。 小 B 給出很多個詢問 [x,

JZOJ-senior-5920. NOIP2018模擬10.22風箏

Time Limits: 4000 ms Memory Limits: 524288 KB Description 當一陣風吹來,風箏飛上天空,為了你,而祈禱,而祝福,而感動…… oyiya 在 AK 了 IOI 之後來到了鄉下,在田野中玩耍,放鬆身心。 他發

JZOJ5932. NOIP2018模擬10.27情報中心

傳送門 preface   這道題資料超級水,暴力70。正解也超級玄學,需要各種卡常技巧。 分析   首先看資料範圍,貌似O(k)才能過廢話。既然是要O(k)的出答案,那就只能預處理了。   設f[i][j][k]表示以第i好結點為起點,在最短距離不超過j的情況下,是否能到達k號結點。對於這樣的東西

jzoj5938. NOIP2018模擬10.30分離計劃(二分)

5938. 【NOIP2018模擬10.30】分離計劃 Description 眾所周知,小Z擁有者足以毀滅世界的力量,可惜他不能控制這份力量,小J和小Z的關係十分親密,一天小J預感到了小Z體內的力量將要爆發。 這次爆發的力量比以往都要強大,以至於將小Z分為了兩個整體,彼此之間靠著萬

jzoj5935. NOIP2018模擬10.29小凱學數學(區間dp)

5935. 【NOIP2018模擬10.29】小凱學數學 Description 由於小凱上次在找零問題上的疑惑,給大家在考場上帶來了很大的麻煩,他決心好好學習數學 本次他挑選了位運算專題進行研究 他發明了一種叫做“小凱運算”的運算子: a$b =( (a&b) + (a|b

jzo5934. NOIP2018模擬10.29列隊(二分圖匹配)

5934. 【NOIP2018模擬10.29】列隊 Description Sylvia是一個熱愛學習的女孩子。 在平時的練習中,他總是能考到std以上的成績,前段時間,他參加了一場練習賽,眾所周知,機房是一個 的方陣。這天,他又打爆了std,感到十分無聊,便想要hack機房內同學的

jzoj5922. NOIP2018模擬10.23sequence(組合數)

5922. 【NOIP2018模擬10.23】sequence Description 小 F 是一位 Hack 國的居民,他生活在一條長度為 n 的街道上,這個街道上總共有 n 個商店。每個商店裡售賣著不同的 Hack 技能包,每個商店本身也會有個便利值。初始時,每個商店的便利值均

jzoj5920. NOIP2018模擬10.21風箏(dp,最長上升子序列)

5920. 【NOIP2018模擬10.21】風箏 Description 當一陣風吹來,風箏飛上天空,為了你,而祈禱,而祝福,而感動…… Description oyiya 在 AK 了 IOI 之後來到了鄉下,在田野中玩耍,放鬆身心。 他發現前面有一排小朋

JZOJ 5937. NOIP2018模擬10.30斬殺計劃

問題 小G有n個小弟,第i個小弟有ai點攻擊力,小G有m點血量。 小J在小G找小第的時間裡去找小Z學到了膜法,他在大戰前配置了三種魔法藥水 1:複用型藥水:花費1法力值,選擇小G的攻擊力小於等於2的一個小弟讓他跟隨自己(變為自己的小弟並且攻擊力和屬於小G時一樣

JZOJ 5936. NOIP2018模擬10.29逛公園

題目 解題思路 50分可以直接暴力。 能用一個變數儲存的,絕對不允許用陣列!! 定址時間卡爆!!! # d

JZOJ 5931. NOIP2018模擬10.27氣泡排序

題目 求一個n的全排列的變成 1…n的序列 期望最少交換次數。 題解 實在想不出來,可以找規律。 其實這題不需要找規律。 方法1 第一類斯特林數靈感? hzj的第一題,序列前n-1個元素只能夠與第n個交換,想到一圈一圈地換。 這裡也是類似的,只不過任意兩個元素都可以交

JZOJ 5932. NOIP2018模擬10.27情報中心

題目 給定一個點數為n個圖,m條邊。 走一條邊算1步。 共有q個詢問 每個詢問中有k個點,求有多少個點可以走最多v步走到詢問中的任意一個點。 資料範圍 n

JZOJ 5933. NOIP2018模擬10.27百鴿籠

題目 鴿鴿鴿 有一個序列,有3種操作。 ①刪除最左邊的元素 ②在序列的最左邊加入一個數。 ③查詢序列中第l個數到第r個數中第k小的數。 題解 想到之前ifk通過動態樹最終狀態的dfs序將問題轉化成靜態樹問題,我打算也用類似的方法。 其實不需要。 每次刪除和插入的都是最左邊的

JZOJ 5925. NOIP2018模擬10.25naive 的瓶子

題目 有 n 個瓶子,它們在桌子上排成一排。第 i 個瓶子的顏色為 ci,每次操作可以選擇兩個相鄰的瓶子,消耗他們顏色的數值乘積的代價將其中一個瓶子的顏色變成另一個瓶子的顏色。 現在要讓所以瓶子的顏色都一樣,操作次數不限,但要使得操作的總代價最小。 題解 比賽時看錯題了,看成