結果

提出番号 948
提出者 MMNMM
言語 C++
提出日時 2017-08-01 16:00:13
問題名 (43)文字列をやたらめったら繰り返す
結果 CE
点数 0%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 CE 0% 0ms 0KB
2 CE 0% 0ms 0KB
3 CE 0% 0ms 0KB
4 CE 0% 0ms 0KB
5 CE 0% 0ms 0KB
6 CE 0% 0ms 0KB
7 CE 0% 0ms 0KB
8 CE 0% 0ms 0KB
9 CE 0% 0ms 0KB
10 CE 0% 0ms 0KB
11 CE 0% 0ms 0KB
12 CE 0% 0ms 0KB
13 CE 0% 0ms 0KB
14 CE 0% 0ms 0KB
15 CE 0% 0ms 0KB
16 CE 0% 0ms 0KB
17 CE 0% 0ms 0KB
18 CE 0% 0ms 0KB
19 CE 0% 0ms 0KB
20 CE 0% 0ms 0KB

ソースコード

#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;
}