ソースコード
#include <bits/stdc++.h>
using namespace std;
long long int N, L, R, l, r, v, p, al[1145][26], ll[1145], A[26], B[26], i;
char s[1145], S[3643];
void cnt(long long a[26], long long b){
long long bb = (upper_bound(ll, ll + N + 1, b) - ll) - 1;
//cout << b << " " << bb << " " << ll[bb] << endl;
if(bb <= 0){
for(int i = 0; i < b; ++i){
++a[S[i] - 97];
}
return;
}
for(int i = 0; i < 26; ++i){
a[i] += al[bb + 1][i] * (b / ll[bb]);
}
cnt(a, b % ll[bb]);
}
int main(){
scanf("%lld%lld%lld", &N, &L, &R);
--L;
for(int i = 0; ++i <= N; ll[i] *= (v + 1)){
p = v;
scanf("%s%lld", s, &v);
if(i == 1)strcpy(S, s);
if(i == 2)strcat(S, s);
for(char j : s){
if(!j)break;
++ll[i - 1];
++al[i][j - 97];
}
for(int j = 0; j < 26; ++j){
al[i][j] += al[i - 1][j] * (p + 1);
}
ll[i] += ll[i - 1];
}
for(int j = 0; j < 26; ++j){
al[N + 1][j] += al[N][j] * (v + 1);
}
//for(int i = 0; i <= N; ++i){
// cout << ll[i] << "\t:";
// for(int j = 0; j < 26; ++j)cout << al[i][j] << (j == 25 ? "\n" : " ");
//}
cnt(A, R);
cnt(B, L);
//for(int i = 0; i < 26; ++i){
// cout << A[i] << (i == 25?"\n":" ");
//}
//for(int i = 0; i < 26; ++i){
// cout << B[i] << (i == 25?"\n":" ");
//}
for(int i = 0; i < 26; ++i){
cout << A[i] - B[i] << (i == 25?"\n":" ");
}
return 0;
}