ARC095 題解

T1 :對於N個數,求出除了第i個數(1<=i<=n)之外的所有數的平均數,直接排序分類討論即可。

T2 :對於N個數,求任意兩數的組合數的最大值,首先最大數肯定要取,然後掃一遍取最接近一半的即可,比賽時忘記考慮可以從小的一邊接近一半,WA了3發才發現……

T3 :對於一個N*M(1<=N,M<=12)的字符矩陣,可以交換任意兩行,任意兩列,問能否最後得到一個矩陣關於兩條對角線對稱。
s[i][j]=s[n+1-i][m+1-j] 比賽時想了個很奇怪的爆搜,結果沒寫出來,賽後看題解發現自己爆搜的姿勢不對。由於行列操作可以互換,先直接枚舉哪兩行配對,是O(12*10*8*6*4*2),大概是4W+,然後在枚舉兩列配對,且要檢查對應配對位是否對稱。總時間大概是4W2 然而實際跑到一半可能就會cut掉,實際跑才2~3ms……

T4 :給定一棵樹T,要求構造一個排列p,
對於每個pij使pj<piij
問是否能構造出與T同構的樹。
首先我們寫寫畫畫一個排列生成的樹,按pi 的權值升序考慮,設當前最大下標爲mx,則當前點一定與mx連邊,如果當前點的下標大於m]x,則更新mx……
這裏寫圖片描述
按照此流程操作後,發現其實形成的樹像個毛毛蟲,一條鏈在中間,其他點都接在鏈上。
所以原來給定的樹必須滿足如上結構,判定的話,中間的鏈顯然是直徑,看一下其他點到直徑的距離是不是都等於1。於是我們順便得到一個數組k,代表直徑上的點上掛了幾個點。
接下來窩們要構造最小字典序。
不妨設藍色的點爲x,x所對應的父親爲y,則x的權值要大於y,且x的下標比y小。
首先假設一開始的排列爲(1,2,……n)對於直徑上的一個點i,假設前面已經有S個點排好,那麼肯定要是S+1儘量前,所以直接將其放在S+1+k[i]的位置。然後兒子在前面依次放即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章