LYDSY 1002

题目大意

暂无

题目解法

暂无

RTFC

#include <cctype>
#include <cstdio>
#include <cstdlib>
#include <cstring>
int f[101][101];
const int L = 1 << 8;
char buffer[L], *S, *T;
#define bufferInit()                                   \
    ;                                                  \
    {                                                  \
        T = (S = buffer) + fread(buffer, 1, L, stdin); \
        while (!isdigit(*T)) T--;                      \
        T++;                                           \
    }
#define getint() (S != T ? strtol(S, &S, 10) : -1)
void optimize(int *a)
{
    for (int i = 0; i < 100; i++)
    {
        while (a[i] < 0) a[i] += 10, a[i + 1]--;
        a[i + 1] += a[i] / 10;
        a[i] %= 10;
    }
}
void add(int *a, int b)
{
    a[0] += b;
}
void mul(int *a, int b)
{
    for (int i = 0; i < 100; i++)
        a[i] *= b;
}
void sub(int *a, int *b)
{
    for (int i = 0; i < 100; i++)
        a[i] -= b[i];
}
int main()
{
    bufferInit();
    f[1][0] = 1;
    f[2][0] = 5;
    int n = getint();
    for (int i = 3; i <= n; i++)
    {
        memmove(f[i], f[i - 1], sizeof(int) * 101);
        mul(f[i], 3);
        sub(f[i], f[i - 2]);
        add(f[i], 2);
        optimize(f[i]);
    }
    int *ans = f[n];
    optimize(ans);
    int i = 100;
    for (; ans[i] == 0 && i >= 0; i--)
        ;
    for (; i >= 0; i--) putchar(ans[i] + '0');
    return 0;
}