結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 WA 0% 2ms 8336KB
2 WA 0% 2ms 7424KB
3 WA 0% 2ms 7712KB
4 WA 0% 2ms 8336KB
5 WA 0% 2ms 7952KB
6 WA 0% 2ms 7520KB
7 WA 0% 1ms 8352KB
8 WA 0% 2ms 8336KB
9 WA 0% 2ms 7504KB
10 WA 0% 2ms 8320KB
11 WA 0% 3ms 7664KB
12 WA 0% 5ms 7696KB
13 WA 0% 3ms 7520KB
14 WA 0% 4ms 7408KB
15 WA 0% 10ms 7680KB
16 WA 0% 4ms 7712KB
17 WA 0% 4ms 7984KB
18 WA 0% 16ms 8000KB
19 WA 0% 4ms 7760KB
20 WA 0% 12ms 8320KB

ソースコード

#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;
    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);
    }
    cnt(A, R);
    cnt(B, L);
    for(int i = 0; i < 26; ++i){
        cout << A[i] - B[i] << (i == 25?"\n":" ");
    }
    return 0;
}