题目描述
每次小明准备唱歌,他会选取两个数l和r(l<r),他会将s中第l个字母~第r个字母拿出来。对于这个子串中的每个字母,他会重复吟唱k次,k为这个字母在字母表中的顺序。
例如,s=’abbcb’,小明选取了l=1,r=5。所以小明选取了子串’abbcb’,其中每个a都会重复1次,b重复2次,c重复3次,所以最后小明吟唱的字符串为’abbbbcccbb’,长度为10。
现在,给你字符串s,并且给你l和r,请你求出小明最后吟唱的字符串长度。
输入
第一行包含两个整数n和q(1≤n、q≤10 0000)-表示字符串s的长度和例子数。
第二行为长度n的字符串s,由小写字母组成。
接下来q行,每行两个整数l和r(1≤l≤r≤n),即选取的子串位置。
输出
q行,每行一个整数。
样例输入
7 3
abacaba
1 3
2 5
1 7
样例输出
4
7
11
提示
【输入输出样例】
输入 | 7 3 abacaba 1 3 2 5 1 7 | 7 4 abbabaa 1 3 5 7 6 6 2 4 | 13 7 sonoshikumiwo 1 5 2 10 7 7 1 13 4 8 2 5 3 9 |
输出 | 4 7 11 | 5 4 1 5 | 82 125 9 191 62 63 97 |
【提示】
对于第一个样例:
选取’aba’变成’abba‘。
选取’baca‘变成’bbaccca‘。
选取’abacaba‘变成’abbacccabba‘。
长度分别为4、7、11。
不是,这不枚举加buff就能过吗?
(所为的buff是O2+O3+....)
代码
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("O2")
#pragma GCC optimize("O3")
#pragma GCC optimize("O4")
#define ll long long
using namespace std;
ll n,m,i,x,y,ans,j;
char a[300005];
main(){
ios::sync_with_stdio(false);
cin.tie(NULL);cout.tie(NULL);
cin>>n>>m>>a+1;
for(i=1;i<=m;i++){
cin>>x>>y;ans=0;
for(j=x;j<=y;j++)
ans+=(int(a[j]-96));//转换过程
cout<<ans<<"\n";
}
}
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("O2")
#pragma GCC optimize("O3")
#pragma GCC optimize("O4")
#define ll long long
using namespace std;
ll n,m,i,x,y,ans,j;
char a[300005];
main(){ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);cin>>n>>m>>a+1;for(i=1;i<=m;i++){cin>>x>>y;ans=0;for(j=x;j<=y;j++)ans+=(int(a[j]-96));//转换过程 cout<<ans<<"\n";}
}