還記得matrix67的「非常男女」計畫嗎?由matrix67策劃的學校大型男女配對活動將在大禮堂隆重舉行,學校裡許多人即將前來捧場。大禮堂一共有n個座位,為了方便管理,matrix67對它們從1到n順序編號。售票工作已經完成,經統計,共有k個人拿到了入場券。由於k< n,因此大禮堂的座位完全足夠。每張入場券上都印有座位號,入場者憑入場券對號入座。在這k個人即將陸續入場時,matrix67發現了乙個嚴重的錯誤:由於在入場券的銷售過程中搞錯了大禮堂總的座位數,入場券上印的座位號只有1到t。雖然這t個座位號中的每乙個都在入場券中至少出現了一次,但有乙個事實不能改變:t< k。也就是說,這k個人中有一些人的入場券上印有相同的座位號。這樣,入場時必將發生很多次座位的爭執。我們假定,當乙個人入場後發現了他該坐的位置上已經有了人,此時這兩個人將發生一次爭執,爭執的結果總是這個人不能奪回座位;此時該人繼續尋找下乙個座位號並可能再次發生爭執,直到找到乙個空位置為止。matrix67必須調整這k個人的入場順序,使得總的座位爭執發生的次數最少。
第一行有三個用空格隔開的正整數n、k、t,它們分別表示總的座位數、實際到場人數和入場券上的最大座位號,它們滿足關係n>k>t。
第二行有k個用空格隔開的正整數。這些正整數保證不超過t,且所有不超過t的正整數總會在這些數中出現至少一次。它們表示這k個人的入場券上印的座位號。
對於30%的資料,n<=10;
對於50%的資料,n<=1000;
對於100%的資料,n<=100 000。
輸出發生爭執的最少次數。
6 5 3
1 2 1 3 2
假設我們將入場順序調整為1、1、3、2、2,下面說明此時發生的座位爭執次數應該如何計算。
第乙個人入場後成功找到1號座位。
第二個人入場後發現自己的入場券上印有的1號座位已經被佔,此時發生一次爭執;而後該人繼續尋找2號座位並就座。
第三個人入場後成功找到3號座位。
第四個人入場後發現2號座位被佔,爭執後轉而尋找3號座位並再次發生爭執,直至成功找到4號座位。這裡的爭執有兩次。
第五個人從2號座位開始尋找,接連三次尋找座位失敗,最終在5號位置就座。這裡一共發生了三次爭執。
這樣的入場方案使得總的爭執數為6次。可以證明,不存在更好的入場順序使得發生爭執的次數少於6次。
matrix67你個坑貨!還寫個樣例說明來騙我們入場順序和爭執次數毫無關係
結論1.前t個人入場必定將前t個座位坐滿。
這一點應該沒有問題吧。
結論2. t個座位號中的每乙個都在入場券中出現過。
為什麼呢?因為是題目原話啊23333
結論3.後面k-t個入場的人必定會發生爭執,且依次坐在k-t個位置上。
由結論1顯然
結論4.入場順序和爭執次數無關
假設前t個人沒有發生爭執,那麼後k-t個人發生爭執次數一定。為什麼呢?由結論3顯然。
接著,我們從k-t中間挑出乙個人與前t個人座位號交換,那麼增加的爭執次數與減少的爭執次數相同,由結論2推導而出,自己動手推算一下。
有了這些基礎,模擬一遍就搞定了。
如果看不懂上面的結論,就當騙分吧。
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
inline
const
int get_int()
while(x>='0'&&x<='9')
return num*bj;
}long
long n,k,t,hash[100005],sum=0;
int main()
}printf("%lld\n",sum);
return
0;}
1245 樹的直徑
題目描述 給你這棵 無向樹 請你測算並返回它的 直徑 這棵樹上最長簡單路徑的 邊數。我們用乙個由所有 邊 組成的陣列 edges 來表示一棵無向樹,其中 edges i u,v 表示節點 u 和 v 之間的雙向邊。樹上的節點都已經用 中的數做了標記,每個節點上的標記都是獨一無二的。示例 1 輸入 e...
Luogu P1245 電話號碼
謹以此題解致敬我的初中英語老師孫菡老師,她帶的班默寫不過的人數總是像 號碼那樣屈指可數 本題的spj似乎已經基本沒有問題了,只要文末沒有多餘的空格和回車就能正常評測。本題給出了26個字母與數字的對應關係,要求將一串數字翻譯為幾個單詞。那麼我們是不需要關注各個單詞中的字母具體是什麼的,只需要存起來輸出...
1245 最小N個數的和
題目就簡單的貼上以下 題目描述 description 有兩個長度為 n 的序列 a 和 b,在 a 和 b 中各任取乙個數可以得到 n 2 個和,求這n 2 個和中最小的 n個。輸入描述 input description 第一行輸入乙個正整數n 第二行n個整數ai 且ai 10 9 第三行n個整...