SETNJA - Setnja

Tác giả: ladpro98

Ngôn ngữ: C++

#include <bits/stdc++.h>
const int MOD = 100000000;
const int N = 10010;
using namespace std;
typedef vector<int> big;
char s[N];

big operator + (big a, big b) {
    big c; int carry = 0;
    for(int i = 0; i < a.size() || i < b.size(); i++) {
        if (i < a.size()) carry += a[i];
        if (i < b.size()) carry += b[i];
        c.push_back(carry % MOD);
        carry /= MOD;
    }
    if (carry) c.push_back(carry);
    return c;
}

big operator * (big a, int b) {
    big c; int carry = 0;
    for(int i = 0; i < a.size(); i++) {
        carry += a[i] * b;
        c.push_back(carry % MOD);
        carry /= MOD;
    }
    if (carry) c.push_back(carry);
    return c;
}

void print(big a) {
    printf("%d", a[a.size() - 1]);
    for(int i = a.size() - 2; i >= 0; i--)
        printf("%08d", a[i]);
    printf("\n");
}

int main() {
    scanf("%s", &s);
    int n = strlen(s);
    big F; F.push_back(1);
    big aster; aster.push_back(1);
    for(int i = 0; i < n; i++) {
        if (s[i] == 'L') F = F + F; else
        if (s[i] == 'R') F = F + F + aster; else
        if (s[i] == '*') {
            F = (F * 5) + aster;
            aster = aster * 3;
        }
    }
    print(F);
    return 0;
}

Download