一年一度的「幻影閣夏日品酒大會」隆重開幕了。大會包含品嚐和趣味挑戰兩個環節,分別向優勝者頒發「首席品酒家」和「首席獵手」兩個獎項,吸引了眾多品酒師參加。
在大會的晚餐上,調酒師 rainbow 調製了 n 杯雞尾酒。這 n 杯雞尾酒排成一行,其中第i杯酒(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。
樣例1:
10 ponoiiipoi
2 1 4 7 4 8 3 6 4 7
樣例2:
12 abaabaabaaba
1 -2 3 -4 5 -6 7 -8 9 -10 11 -12
樣例1:
45 56
10 56
3 32
0 0
0 0
0 0
0 0
0 0
0 0
0 0樣例2:
66 120
34 120
15 55
12 40
9 27
7 16
5 7
3 -4
2 -4
1 -4
0 0
0 0題解:
問題轉化為分別求lcp>=r的字尾的組數
算是道思維題吧,關鍵需要明白lcp為l的一組 對後面的l-1 l-2 l-3....也可以貢獻
那麼就出現了正解,要不然就只能 n^2logn亂搞了
顯然 按上面得出的結論 可以從大到小排序high陣列,然後分別處理,一組lcp為l的字尾顯然和大於l字尾匹配
所以合併答案直接相乘即可,合併可以並查集亂搞
1 #include 2 #include 3 #include 4 #include 5 #include 6using
namespace
std;
7 typedef long
long
ll;8
const
int n=300005;const ll inf=2e18;
9char s[n];int
n,c[n],x[n],y[n],s[n],a[n],sa[n],rk[n],high[n];
10bool comp(int i,int j,int k)
11void
getsa()30}
31void
getheight()40}
41 ll mx[n],mn[n],ans[n],size[n],mul[n];int
r[n],fa[n];
42int find(int x)
43bool comper(int i,int j)
44void
getanswer()
56for(int i=n-1;i>=0;i--)ans[i]+=ans[i+1],mul[i]=max(mul[i],mul[i+1
]);57
for(int i=0;i"
%lld %lld\n
",ans[i],ans[i]?mul[i]:0
);58}59
intmain()
60
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,每個標...