瀧打工的餐廳正在舉行擺盤大賽,你能幫助瀧拿到盡量高的獎金嗎?瀧拿到獎金後會請三葉和你喝咖啡的!
餐廳提供了n個盤子,分別編號為n1,2,⋯,n。把它們排成一行,排好後第(1≤i≤n)個盤子的編號為a_ai,此時稱序列a1,a2,⋯,an為一種擺法,也就是說每一種擺法恰為1~n的乙個排列。如3個盤子的不同擺法有1,2,3,1,3,2,2,1,3,2,3,1,3,1,2,3,2,1六種。
兩種擺法比較大小的方法如下:首先比較第1個盤子的序號;如果第1個盤子的序號相同,則再比較第2個盤子的序號;如果第2個盤子的序號也相同,再比較第3個盤子的序號……依此類推。我們稱這種比較擺法大小的方法為按字典序比較。上面列舉的3個盤子的所有擺法就是按照字典序從小到大給出的。
餐廳主管喜歡不同尋常的擺法。他定義擺法a的「錯亂數」為擺法aa中滿足ai≠i的ii的數量,如擺法1,2,3的錯亂數為0,擺法1,3,2的錯亂數為2,擺法3,2,1的錯亂數也為2。根據自己的喜好,餐廳主管對每乙個錯亂數k(0≤k≤n)設定了基礎獎金ck。
擺盤大賽的規則如下:選手選定某乙個錯亂數k,按字典序從小到大擺出所有錯亂數為k的擺法,如果他擺出的擺法共有d種,那麼他得到的獎金為dm=ck×d。當然,餐廳主管的錢有限,最終發放的獎金為mmod993244853的值。
現在瀧想拿到最高的獎金。請你幫他找出k,使得他最終得到的獎金最多,並告訴他獎金的最大值和錯亂數為k的字典序最小的擺法。如果有k1
輸入格式:
輸入共2行。
第1行有1個正整數n,表示餐廳提供的盤子的數目。
第2行有n+1個非負整數,第k(0≤k≤n)個整數ck表示所選錯亂數為k時的基礎獎金。
輸出格式:
設選定錯亂數為k時,最終得到的獎金最大。k不必輸出。
輸出共2行。
第1行有1個非負整數,表示最終得到的獎金的最大值。
第2行有n個正整數,表示錯亂數為k,且字典序最小的擺法。
我覺得是很困難的數學題了!
自己做的時候只能推出來乙個全錯排的遞推式
an=a(n,n)-a2*c(n,2)-a3*c(n,3)-……-an-1*c(n,n-1)-1
沒錯,又是組合數,又是排列數,我當時打表找規律找到眼睛痛才推出來這個,然而是真的化不來簡了!!放棄t t
這題太毒了,首先你得了解一下這個
然後你能愉快地得到乙個公式
看了這個公式你會發現,你需要遞推求逆元。
然後借用出題人的圖
你會發現保證字典序最小有個奇特的規律
前面k項都是左右相鄰項交換,最後兩項才有變,第k−1個是k,當k是奇數時第k個是k-2,當k是偶數時第k個是k-1。
而且根據紅色字型也可看出規律吧。
按照字典序的定義,我們只要優先保證在前面的位置上放置最小的元素,就能保證字典序最小。
若k是偶數,那麼前k−2個元素是完整的兩兩鄰項交換(參見上圖),最後兩個元素也如法炮製進行鄰項交換即可。
若k是奇數,那麼k−2也是奇數,按上面的鄰項交換法則,第k−2個元素是k−1。這樣,前k−2個元素的鄰項交換便是不完整的。此時如果第k−1個位置仍按鄰項交換的方法放置k−2,第k個元素就只能是k,不滿足完全錯排的條件。因此,第k−1個位置只能放k,而要在第k個位置上放k−2。
就這樣,我們找出了生成字典序最小的完全錯排的方法。結合前面的討論,我們就可以生成答案了。
#include #include#define maxn 1000005
#define mod 993244853
#define maxl 25
using
namespace
std;
typedef
long
long
ll;int
cost[maxn],tmp[maxl],inv[maxn],b[maxn],c[maxn],ansb[maxn];
ll read()
while (!isdigit(ch));
while
(isdigit(ch))
return ans%mod;
}void write(int
x)
while
(x)
for (int i=lg-1;i>=0;i--)
putchar(tmp[i]+'0'
);}void make_b(int pos,int n,int
k)int
main()
}write(maxans);
putchar('\n
');for (int i=1;i<=n-maxi;i++)
ansb[i]=i;
if(maxi)
make_b(n-maxi+1,maxi,n-maxi);
for (int i=1;i<=n;i++)
putchar('\n
');return0;
}
洛谷比賽 你的名字T1 線索
祭典即將舉行,編織結繩的工作正在緊張地開展著。而這天,瀧和三葉交換了身體,三葉擔心瀧不會編結繩,在日記裡留下了編織結繩的方法,並請你來幫助瀧編好結繩。將絲線匯集在一起,編織成形 扭曲,纏繞,有時又還原,再連線 那就是結,那就是時間。現在瀧要編織由n條絲線組成的結繩。這nn條結繩緊緊排成一排,按位置把...
模擬 2018 9洛谷月賽T2
傳送門 一道模擬題?根據給出的條件可以分類討論列出關於k的不等式,然後求區間的交 但是求交不好求,可以轉化成求補集的並,還是挺常見的套路 具體實現還是很有技巧的,可以用結構體存這個點和它的型別 左端點or右端點 然後通過排序求並,具體細節看注釋 include include include inc...
洛谷2019 3月月賽 T2
題幹 洛谷同款 t2?看似比t1簡單些 二維字首和嘛?多簡單 我天天拿二維字首和水dp 這是字首和的預處理 2333 處理出來所有的情況 某個地方要加上mod再 mod 如果沒有這一步 那麼 70pts 然後附帶5 的分值飛走。2333 然後.就a掉了 include using namespace...