社区讨论

蒟蒻MLE求助

学术版参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo1yjefw
此快照首次捕获于
2023/10/23 05:05
2 年前
此快照最后确认于
2023/11/03 05:30
2 年前
查看原帖
Rt,代码如下
C
#include<iostream>
//#include<bits/stdc++.h>
#pragma warning(disable:4996)
#define ll long long
using namespace std;
#define L 100000
struct large {
    int len;
    long long val[100005];
    void clear() {
        len = 0;
        memset(val, 0, sizeof(val));
    }
    void setu(int k) {
        clear();
        len = 1;
        val[1] = k;
    }
    void write() {
        printf("%lld", val[len]);
        for (int i = len - 1; i >= 1; i--) printf("%05lld", val[i]);
        printf("\n");
    }
}ans;
large pls(large x, large y) {
    large s;
    s.clear();
    s.len = max(x.len, y.len) + 20;
    for (int i = 1; i <= s.len; i++) {
        s.val[i] += x.val[i] + y.val[i];
        s.val[i + 1] += s.val[i] / L;
        s.val[i] %= L;
    }
    for (int i = 1; i <= s.len; i++) {
        s.val[i + 1] += s.val[i] / L;
        s.val[i] %= L;
    }
    while (s.len && !s.val[s.len])s.len--;
    return s;
}
large mult(large x, large y) {
    large s;
    s.clear();
    s.len = x.len + y.len + 20;
    for (int i = 1; i <= x.len; i++)
        for (int j = 1; j <= y.len; j++) {
            s.val[i + j - 1] += x.val[i] * y.val[j];
            s.val[i + j] += s.val[i + j - 1] / L;
            s.val[i + j - 1] %= L;
        }
    for (int i = 1; i <= s.len; i++) {
        s.val[i + 1] += s.val[i] / L;
        s.val[i] %= L;
    }
    while (s.len && !s.val[s.len])s.len--;
    return s;
}
inline ll read() {
    ll date = 0, w = 1; char c = 0;
    while (c < '0' || c>'9') { if (c == '-')w = -1; c = getchar(); }
    while (c >= '0' && c <= '9') { date = date * 10 + c - '0'; c = getchar(); }
    return date * w;
}
ll n, m;
large A(ll n, ll m) {
    large s, x;
    s.clear();
    if (m > n)return s;
    s.setu(1);
    if (!m)return s;
    for (ll i = n - m + 1; i <= n; i++) {
        x.clear(); x.setu(i);
        s = mult(s,x);
    }
    return s;
}
inline void solve(ll n, ll m) {
    ans = pls(mult(A(n, n), mult(A(n + 1, 2), A(n + 3, m))), mult(mult(mult(A(n, n), A(n + 1, 1)), mult(A(2, 2), A(m, 1))), A(n + 1, m - 1)));
    ans.write();
}
int main() {
    n = read(); m = read();
    solve(n, m);
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...