ソースコード
#include "iostream"
#include "climits"
#include "list"
#include "queue"
#include "stack"
#include "set"
#include "functional"
#include "algorithm"
#include "math.h"
#include "utility"
#include "string"
#include "map"
#include "unordered_map"
#include "iomanip"
#include "random"
using namespace std;
const long long int MOD = 1000000007;
long long int power(long long int x, long long int n, long long int M) {
long long int tmp = 1;
if (n > 0) {
tmp = power(x, n / 2, M);
if (n % 2 == 0) tmp = (tmp*tmp) % M;
else tmp = (((tmp*tmp) % M)*x) % M;
}
return tmp;
}
long long int N, M, K, Q, W, H, L, R;
long long int ans;
int main() {
ios::sync_with_stdio(false);
cin >> N >> L >> R;
string s[1001];
long long int l[1001] = {};
long long int r[1001] = {};
long long int sum[1001][26] = {};
long long int loop_size[1001] = {};
long long int loop_sum[1001][26] = {};
long long int ret[26] = {};
for (int i = 1; i <= N; i++) {
cin >> s[i] >> M;
l[i] = r[i - 1] + 1;
r[i] = l[i] + s[i].size() - 1;
loop_size[i] = r[i];
r[i] *= (1 + M);
int box = 0;
if (i)for (int j = 0; j < 26; j++)sum[i][j] = sum[i - 1][j];
for (auto j : s[i]) {
sum[i][j - 'a']++;
}
for (int j = 0; j < 26; j++) {
loop_sum[i][j] = sum[i][j];
sum[i][j] *= (1 + M);
}
cout << r[i] << endl;
}
while (R) {
if (loop_size[1] > R) {
for (int i = 0; i < R; i++) {
ret[s[1][i] - 'a']++;
}
R = 0;
}
for (int i = 1; i < N; i++) {
if (r[i] < R&&loop_size[i + 1]>R) {
for (int j = 0; j < 26; j++) {
ret[j] += sum[i][j];
}
R -= r[i];
for (int j = 0; j < R; j++) {
ret[s[i + 1][j] - 'a']++;
}
R = 0;
break;
}
}
for (int i = 1; i <= N; i++) {
if (loop_size[i] <= R&&R <= r[i]) {
for (int j = 0; j < 26; j++) {
ret[j] += loop_sum[i][j] * (R / loop_size[i]);
}
R -= (R / loop_size[i])*loop_size[i];
break;
}
}
}
L--;
while (L > 0) {
if (loop_size[1] > L) {
for (int i = 0; i < L; i++) {
ret[s[1][i] - 'a']--;
}
L = 0;
}
for (int i = 1; i < N; i++) {
if (r[i] < L&&loop_size[i + 1]>L) {
for (int j = 0; j < 26; j++) {
ret[j] -= sum[i][j];
}
L -= r[i];
for (int j = 0; j < L; j++) {
ret[s[i + 1][j] - 'a']--;
}
L=0;
break;
}
}
for (int i = 1; i <= N; i++) {
if (loop_size[i] <= L&&L <= r[i]) {
for (int j = 0; j < 26; j++) {
ret[j] -= loop_sum[i][j] * (L / loop_size[i]);
}
L -= (L / loop_size[i])*loop_size[i];
break;
}
}
}
long long int aaa = 0;
for (int i = 0; i < 26; i++) {
if (i)cout << " ";
cout << ret[i];
aaa += ret[i];
}
cout << endl;
// cout << aaa << endl;
return 0;
}