結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 2ms 7888KB
2 AC 100% 2ms 8320KB
3 AC 100% 3ms 8272KB
4 AC 100% 3ms 7888KB
5 AC 100% 15ms 8320KB
6 AC 100% 2ms 7712KB
7 AC 100% 3ms 7904KB
8 AC 100% 3ms 7920KB
9 AC 100% 12ms 7344KB
10 AC 100% 4ms 8272KB
11 WA 0% 5ms 10288KB
12 WA 0% 8ms 10288KB
13 WA 0% 5ms 8240KB
14 WA 0% 6ms 9600KB
15 WA 0% 7ms 10048KB
16 WA 0% 5ms 10288KB
17 WA 0% 6ms 10288KB
18 WA 0% 5ms 10288KB
19 WA 0% 22ms 10288KB
20 WA 0% 30ms 10176KB

ソースコード

#include <bits/stdc++.h>
using namespace std;

long long int N, L, R, l, r, v[1145], p, al[1145][26], ll[1145], LL[1145], A[26], B[26], i;
char s[1145][1145];

void cnt(long long a[26], long long b){
    long long bb = (upper_bound(ll, ll + N, b) - ll) - 1;
    //cout << b << " " << bb << " " << ll[bb] << endl;
    if(b <= LL[bb]){
        //cout << "count for " << b-ll[bb] << ", " << v[bb - 1] + 1 << endl;
        for(int i = 0; i < b - ll[bb]; ++i){
            ++a[s[bb][i] - 97];
        }
        if(ll[bb])for(int i = 0; i < 26; ++i)a[i] += al[bb][i] * (v[bb - 1] + 1);
        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] = LL[i - 1] * (v[i - 1] + 1)){
        LL[i] = ll[i];
        scanf("%s%lld", s[i], v + i);
        for(char j : s[i]){
            if(!j)break;
            ++LL[i];
            ++al[i + 1][j - 97];
        }
        for(int j = 0; j < 26; ++j){
            al[i + 1][j] += al[i][j] * (v[i - 1] + 1);
        }
    }
    for(int j = 0; j < 26; ++j){
        al[N + 1][j] += al[N][j] * (v[N - 1] + 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" : " ");
    //}
    //for(int i = 0; i <= N; ++i){
    //    cout << LL[i] << endl;
    //}
    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;
}