A92031.「NOI2015」品酒大会
NOI/NOI+/CTSC
通过率:0%
时间限制:1.00s
内存限制:256MB
题目描述
一年一度的「幻影阁夏日品酒大会」隆重开幕了。大会包含品尝和趣味挑战两个环节,分别向优胜者颁发「首席品酒家」和「首席猎手」两个奖项,吸引了众多品酒师参加。
在大会的晚餐上,调酒师 Rainbow 调制了 n 杯鸡尾酒。这 n 杯鸡尾酒排成一行,其中第 i 杯酒 (1≤i≤n) 被贴上了一个标签 si,每个标签都是 26 个小写英文字母之一。设 Str(l,r) 表示第 l 杯酒到第 r 杯酒的 r−l+1 个标签顺次连接构成的字符串。若 Str(p,p0)=Str(q,q0),其中 1≤p≤p0≤n,1≤q≤q0≤n,p=q,p0−p+1=q0−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,统计出有多少种方法可以选出两杯「r 相似」的酒,并回答选择两杯「r 相似」的酒调兑可以得到的美味度的最大值。
输入格式
输入文件的第一行包含一个正整数 n,表示鸡尾酒的杯数。
第二行包含一个长度为 n 的字符串 S,其中第 i 个字符表示第 i 杯酒的标签。
第三行包含 n 个整数,相邻整数之间用单个空格隔开,其中第 i 个整数表示第 i 杯酒的美味度 ai。
输出格式
输出文件包括 n 行。第 i 行输出两个整数,中间用单个空格隔开。第一个整数表示选出两杯「(i−1) 相似」的酒的方案数,第二个整数表示选出两杯「(i−1) 相似」的酒调兑可以得到的最大美味度。若不存在两杯「(i−1) 相似」的酒,这两个数均为 0。
输入输出样例
输入#1
10 ponoiiipoi 2 1 4 7 4 8 3 6 4 7
输出#1
45 56 10 56 3 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0
输入#2
12 abaabaabaaba 1 -2 3 -4 5 -6 7 -8 9 -10 11 -12
输出#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
说明/提示
| Case # | n 的规模 | ai 的规模 | 备注 |
|---|---|---|---|
| 1 | n=100 | ∣ai∣≤10000 | - |
| 2 | n=200 | ∣ai∣≤10000 | - |
| 3 | n=500 | ∣ai∣≤10000 | - |
| 4 | n=750 | ∣ai∣≤10000 | - |
| 5 | n=1000 | ∣ai∣≤1000000000 | - |
| 6 | n=1000 | ∣ai∣≤1000000000 | - |
| 7 | n=2000 | ∣ai∣≤1000000000 | - |
| 8 | n=2000 | ∣ai∣≤1000000000 | - |
| 9 | n=99991 | ∣ai∣≤1000000000 | 不存在「10 相似」的酒 |
| 10 | n=99991 | ∣ai∣≤1000000000 | 不存在「10 相似」的酒 |
| 11 | n=100000 | ∣ai∣≤1000000 | 所有 ai 的值都相等 |
| 12 | n=200000 | ∣ai∣≤1000000 | 所有 ai 的值都相等 |
| 13 | n=300000 | ∣ai∣≤1000000 | 所有 ai 的值都相等 |
| 14 | n=300000 | ∣ai∣≤1000000 | 所有 ai 的值都相等 |
| 15 | n=100000 | ∣ai∣≤1000000000 | - |
| 16 | n=100000 | ∣ai∣≤1000000000 | - |
| 17 | n=200000 | ∣ai∣≤1000000000 | - |
| 18 | n=200000 | ∣ai∣≤1000000000 | - |
| 19 | n=300000 | ∣ai∣≤1000000000 | - |
| 20 | n=300000 | ∣ai∣≤1000000000 | - |