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