NOI2015 品酒大會

2022-05-09 12:45:28 字數 2288 閱讀 3538

一年一度的「幻影閣夏日品酒大會」隆重開幕了。大會包含品嚐和趣味挑戰 兩個環節,分別向優勝者頒發「首席品酒家」和「首席獵手」兩個獎項,吸引了眾多品酒師參加。

在大會的晚餐上,調酒師 rainbow 調製了 n 杯雞尾酒。這 n 杯雞尾酒排成一行,其中第 n 杯酒 (1 ≤ i ≤ n) 被貼上了乙個標籤si,每個標籤都是 26 個小寫 英文本母之一。設 str(l, r)表示第 l 杯酒到第 r 杯酒的 r − l + 1 個標籤順次連線構成的字串。若 str(p, po) = str(q, qo),其中 1 ≤ p ≤ po ≤ n, 1 ≤ q ≤ qo ≤ n, p ≠ q, po − p + 1 = qo − q + 1 = r ,則稱第 p 杯酒與第 q 杯酒是「 r 相似」 的。當然兩杯「 r 相似」(r > 1)的酒同時也是「 1 相似」、「 2 相似」、……、「 (r − 1) 相似」的。特別地,對於任意的 1 ≤ p , q ≤ n , p ≠ q ,第 p 杯酒和第 q 杯酒都 是「 0 相似」的。

在品嚐環節上,品酒師 freda 輕鬆地評定了每一杯酒的美味度,憑藉其專業的水準和經驗成功奪取了「首席品酒家」的稱號,其中第 i 杯酒 (1 ≤ i ≤ n) 的 美味度為 ai 。現在 rainbow 公布了挑戰環節的問題:本次大會調製的雞尾酒有乙個特點,如果把第 p 杯酒與第 q 杯酒調兌在一起,將得到一杯美味度為 ap*aq 的 酒。現在請各位品酒師分別對於 r = 0,1,2, ⋯ , n − 1 ,統計出有多少種方法可以 選出 2 杯「 r 相似」的酒,並回答選擇 2 杯「 r 相似」的酒調兌可以得到的美味度的最大值。

輸入格式:

第 1 行包含 1 個正整數 n ,表示雞尾酒的杯數。

第 2 行包含乙個長度為 n 的字串 s,其中第 i 個字元表示第 i 杯酒的標籤。

第 3 行包含 n 個整數,相鄰整數之間用單個空格隔開,其中第 i 個整數表示第 i 杯酒的美味度 ai 。

輸出格式:

包括 n 行。第 i 行輸出 2 個整數,中間用單個空格隔開。第 1 個整 數表示選出兩杯「 (i − 1) 相似」的酒的方案數,第 2 個整數表示選出兩杯 「 (i − 1) 相似」的酒調兌可以得到的最大美味度。若不存在兩杯「 (i − 1) 相似」 的酒,這兩個數均為 0 。

字尾陣列處理height,然後從後向前掃,用並查集維護同組最大、次大、最小、次小,然後轉移就行了。

吐槽luogu評級黑色太水。

**:

#include#include

#include

#include

using

namespace

std;

#define n 300050

#define inf 1000000001ll

#define ll long long

intn,a[n],hs[n],rank[n],tr[n],sa[n],h[n];

char

s[n];

ll v[n],as1[n],as2[n];

bool cmp(int x,int y,int

k)void

get_sa()

}void

get_h()

}}int

hed[n],cnt;

struct

ege[n];

void ae(int f,int u,int

v)int

fa[n];

ll f[n][

4],siz[n];

int findfa(int

x)int

main()

intu,v,f1,f2;

ll now = 0

; as2[n+1]=-inf*inf;

for(int i=n;i>=0;i--)

}else

if(f[f1][0]>f[f2][1

])

as2[i]=max(as2[i],f[f2][0]*f[f2][1

]);

if(f[f1][3]<=f[f2][3

])

}else

if(f[f1][3]2

])

if(f[f2][2]!=inf)

as2[i]=max(as2[i],f[f2][2]*f[f2][3

]); }

}as1[i]=now;

}for(int i=0;i)

return0;

}

Noi 2015 品酒大會

題目等價於求任意兩對字尾的lcp的值小於等於1,2 n的個數,以及權值乘積的最大值。求出字尾陣列的height值,然後預處理出每個height值能夠成為最小的區間。考慮每個height的值對答案的貢獻 如果height i 能夠成為最小的區間為 l,r 那麼個數便是 l i 1 r i 1 而乘積最...

NOI2015 品酒大會

字尾自動機 首先考慮第一問 我們先將字尾自動機建出來,考慮每個節點,它出現的次數肯定是endpos的size 我們記為num 那麼選取這個節點的串的方案數即為c num,2 num num 1 2,所能貢獻的長度區間為這個節點對應的所有串的長度即 len fa x 1 len x 1 這裡可以差分一...

NOI2015 品酒大會

一年一度的 幻影閣夏日品酒大會 隆重開幕了。大會包含品嚐和趣味挑戰 兩個環節,分別向優勝者頒發 首席品酒家 和 首席獵手 兩個獎項,吸引了眾多品酒師參加。在大會的晚餐上,調酒師 rainbow 調製了 n 杯雞尾酒。這 n 杯雞尾酒排成一行,其中第 n 杯酒 1 i n 被貼上了乙個標籤si,每個標...