THUSC2017題解
題目都是在LOJ上交的。
chocolate
這題看着就讓人想起了百度之星復賽的\(T5\),就是這題。
因為種類的個數很多,所以把每個種類隨意\(rand\)一個\([1,k]\)的權值做一個映射,這樣子隨機若干次的正確率就會很高。
接下來考慮如何計算要求的東西,這個東西很顯然就是要求解一個中位數最小的斯坦納樹。
中位數顯然直接二分處理掉,轉為求解在用的塊數最小的前提下的最小的大於中位數的值的個數。
斯坦納樹求解即可。
講個卡常小細節,上面這個東西我們轉移的時候顯然是可以構建一個二元組轉移,優先級較高的是塊的個數,較低的是小於二分值的個數,這個東西哈希一下,給他們定義一個權值,如果小於二分值則給一個\(1001\),否則給個\(1000\),這樣子也可以做到二元組的效果。
代碼就戳提交記錄吧,提交記錄。
dls
考慮一個很暴力的想法,如果我們知道每個數的每個質因子的出現情況的奇偶性,把它壓成一個二進制數,那么問題就轉為了給你若干個二進制數,你要從中選出若干個數使得他們的異或和為\(0\),求解方案數。
那么構建線性基之后答案顯然是\(2^{R-L+1-tot}\),其中\(tot\)是線性基中的元素個數。
問題在於怎么構建這個線性基,然后計算其中元素的個數。
如果\(R-L\)足夠大的時候,我們就認為只要在\([L,R]\)之間出現過的質數就會被加入到線性基中。
否則\(R-L\)很小,我們把所有質因子全部找出來,然后暴力\(bitset\)構建線性基計算。
這個值大概取到\(6000\)左右就可以保證正確性了。
提交記錄戳這里
seat
這題很明顯就是一個費用流的模型。
但是如果直接爆力兩兩之間連邊也是不可取的。
發現每個人可以坐的桌子是一段連續區間,
同時到每個座位的貢獻也不同,那么把\(m\)個位置拆開,即現在有了\(m\)個\([1,n]\)的區間。
當前點可以向這些區間連邊,那么就改為線段樹優化連邊,特定位置轉到某個位置的貢獻很好算,但是移動桌子的貢獻就不好算了。
其實也不麻煩,假設當前這個人所在的桌子在他目標桌子的左邊。
那么對於線段樹的每個節點,如果要向右兒子走,必定會跨過所有左兒子,所以加上兩倍左兒子大小的貢獻。
反過來,如果在目標桌子的右側的話,就是向左兒子走的時候產生貢獻。
那么就再把每棵線段樹拆成兩棵,分別對應左兒子產生貢獻以及右兒子產生貢獻。
這樣子一共維護\(2m\)棵線段樹進行優化連邊就好了。
注意一下,每次點向區間連邊的時候,不需要對\(2m\)棵每棵都連邊,只需要向它自己所在位置的那棵線段樹連邊就行了,最后再把同一個桌子上的相鄰位置之間連費用為\(1\)的邊就好了。
magic
說個小秘密,這題曾經被毒瘤\(wfj\_2048\)出到了\(NOIP2017\)模擬賽中。那個時候菜得不行的我連線段樹都寫不好還寫這種題。。。。
不過現在看海星吧。
三個三元組之間互相關聯,所以可以把操作都寫成一個\(3*3\)的矩陣的形式,那么三個值就是一個\(1*3\)的行向量。然后線段樹直接區間維護一下就好啦。
然而有些操作和區間長度相關,所以再加一維維護區間長度就好啦。
然而這題有點卡常,稍微注意一下常數上的優化。
提交記錄戳這里
farben
看到本質不同的方案數肯定是\(Burnside\)引理了。
那么要求的就是對於每一種置換的不動點數量。
顯然對於每種旋轉\(d\)個元素的置換而言,其循環節大小為\(gcd(n,d)\)。
然后可以矩乘計算循環節長度為\(i\)時的方案數\(f[i]\)。
那么答案就是\(\frac{1}{n}\sum_{d|n}\varphi(\frac{n}{d})f[d]\)。
約數個數很少,甚至可以暴力,所以問題在於怎么求解\(f\)數組。
顯然直接求是沒辦法了,所以提前打好表預處理出前面若干項,然后直接\(BM\)解遞推式,再用線性齊次常系數遞推那套理論就可以快速計算\(f\)的值了。
提交記錄戳這里
tangent
題答題,先咕了。
