bzoj 4895 項鍊分贓(增強版)

2021-08-02 16:51:18 字數 2546 閱讀 3253

time limit: 

1 sec  

memory limit: 

128 mb

submit: 

277  

solved: 

211[

submit

][status

][discuss

]你和你的1個同夥偷了一串長度為n的項鍊,它上面有m種顏色的珠子,我們假設項鍊為鏈狀的,並且每一顆珠子都是隨機分布,現在我想知道,對於給定的n,m你在最壞情況下最少需要切多少刀 才能使得你們可以通過每人獲得一些切完之後的項鍊,並且滿足每個人得到的每種寶石的數量剛好相同,我們假設珠子的數目一定是偶數。也就是說對於每種情況都一定存在一種解決方案。然而這才是這個問題的真正形式。

輸入一行2個整數n,m意義如上所述。

n,m<=1000000000

輸出1行,表示在最壞情況下需要多少刀。

1000 55

【hint】

事實上我們發現,只要我們給隊友一刀就能解決了。

一條n個珠寶的項鍊,每個珠寶有乙個顏色,一共m種顏色。每種顏色均有偶數個珠寶。 

現在切若干刀分成若干段,將一些段給a另一些給b。 

使a和b每種顏色獲得的珠寶數相同。 

試證明至多m刀即可。

基本是參考原題解的。 

假設地球是乙個完美的球體,而且氣溫和氣壓的變化是連續的,那麼地球上一定存在一對相對的點氣溫和氣壓都相等。 

我們來考慮證明吧。 

假設你和你的女朋友都繞赤道走了半圈,且時刻保持你們兩個所處的位置相對。 

我們把赤道上氣溫氣壓的影象畫出來,大概是這個樣子的: 

我們知道氣壓的連續變化的。 

然後你發現兩人轉半圈,且位置時刻相對,最終交換位置。 

也就是你的氣壓從x變成了y,而你女友的氣壓從y變成了x。 

那麼無論多曲折,因為變化連續必定有交點。 

也就是說同一條弧上存在相對點氣壓相等。 

對於每個類似赤道的弧,你都能得到這樣的兩點氣壓相同。 

現在假設你和你的女朋友在赤道相對的位置且氣壓相同。 

然後像圖上這樣走。 

這個過程中,你們的氣壓時刻相同,最後又會交換位置。 

那麼,你的初始氣溫是x,你的女朋友初始氣溫是y,最終你變成y而你女朋友變成x。 

與氣壓一樣,你們在某個點上氣溫一定會相同。 

那麼,總有乙個(x,y,z),和(-x,-y,-z)的氣溫與氣壓都相等。 

現在呢,原來的項鍊是一堆離散的點。 

我們將它變成連續的,即可以在實數字置動刀。乙個人可以獲得實數個某顏色。 

只要能找到實數解,當然就能找到整數解。 

這個很容易證明,因為總和是整數,乙個合法解某人得到的某顏色一定是整數,即使存在實數段,可以通過改變刀的位置保持合法不變,然後能找到整數解。 

現在讓我們來說明新問題有解吧! 

首先我們回憶一下地球問題告訴了我們什麼呢? 

地球是乙個三維空間,每個位置有氣溫和氣壓,氣溫和氣壓是連續變化的。 

我們設函式f(x,y,z)=(p,q)表示(x,y,z)的氣溫是p氣壓是q。 

那麼存在f(x,y,z)=f(-x,-y,-z)。 

這就是地球問題給我們的結論。 

接下來,我們證明m=2時項鍊切了兩刀一定有解。 

我們設項鍊長度為1,你用兩刀將項鍊切成了三段,長度分別是x^2,y^2和z^2。 

那麼有x^2+y^2+z^2=1。 

你可能發現了這就是乙個球的方程式。 

一組解(x,y,z)的含義是什麼?對於每一段,它是帶符號的。我們認為正表示給了第乙個海盜,負表示給了第二個海盜。 

同樣的我們給它設定乙個函式f(x,y,z)=(p,q),p表示第乙個海盜獲得的第一種顏色的數量,q表示第乙個海盜獲得的第二種顏色的數量。

可以發現,它的變化的連續的! 

接著,根據地球問題得到的結論。 

存在f(x,y,z)=f(-x,-y,-z)。 

回憶含義,全部取反相當於兩個海盜交換了所擁有的顏色段。 

而f(x,y,z)=f(-x,-y,-z)也就說明兩個海盜每種顏色擁有數量都相同! 

因此我們證明了m=2的情況。 

m無論多大,都可以用m+1維地球的思路來解釋不用超過m刀即可完成分贓。 

證畢?

#include#includeusing namespace std;

int main(void)

BZOJ 4893 項鍊分贓

有一串長度為n的項鍊,上面有紅綠藍三種顏色的珠子,每種顏色的珠子數目都是偶數,現在要你把它切幾刀分成 若干段,把其中一些段分給海盜1,剩餘的段分給海盜2,要求兩個海盜分得的每種顏色的珠子數量都相同,請輸出 最少需要切多少刀。第一行乙個整數n,表示項鍊的長度。第二行n個0 2的整數,分別表示紅綠藍三種...

BZOJ1493 NOI2007 項鍊工廠

原題位址 又是一道資料結構神題,卡了一晚上 寫一下其中幾個寫搓的地方 1.update 時要clear 左右子樹 2.查詢完之後要記得把樹merge 回去 3.交換操作那裡,若i,j相等則直接退出,要不然會出錯 4.染色 查詢操作l r和l r時split 的範圍不同 update split 函式...

bzoj1493 NOI2007 項鍊工廠

維護全域性移動量什麼的後可以上線段樹。思維難度低一點的做法是直接splay。適合我這種腦殘選手 f操作就是把2 n翻轉。r操作就是把後面k個元素插到最前面來。維護顏色段是老套路了。比較坑的是。多加倆邊界節點的話,需要考慮有沒有可能對答案造成影響。然而邊界節點不可能在合併子區間的時候造成干擾。而且p操...