一年一度的「幻影閣夏日品酒大會」隆重開幕了。大會包含品嚐和趣味挑戰 兩個環節,分別向優勝者頒發「首席品酒家」和「首席獵手」兩個獎項,吸引了眾多品酒師參加。
在大會的晚餐上,調酒師 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,每個標...