TLE求调
查看原帖
TLE求调
621883
MushR楼主2024/8/13 10:17

马蜂有点屎

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

int n,m;

typedef string hint;

inline hint ltoh(int n){
    hint ans;
    if(!n)
        return "0";
    while(n){
        ans=char(n%10+'0')+ans;
        n/=10;
    }
    return ans;
}

hint delz(hint a){
    int len=a.size();
    int p=0;
    for(;p<len-1&&a[p]=='0';p++);
    return a.substr(p,len-p);
}

inline hint add(hint a,hint b){
    hint ans;
    int w,c=0;
    if(a.size()>b.size()) swap(a,b);
    int len=b.size(),lenx=b.size()-a.size();
    while(lenx--)
        a='0'+a;
    for(int i=len-1;i>=0;i--){
        int ai=a[i]-'0',bi=b[i]-'0';
        w=ai+bi+c;
        c=w/10,w%=10;
        ans=char(w+'0')+ans;
    }
    if(c)
        ans=char(c+'0')+ans;
    return delz(ans);
}

inline hint mul(hint a,int b){
    hint ans;
    int w,c=0;
    int len=a.size();
    for(int i=len-1;i>=0;i--){
        int ai=a[i]-'0';
        w=ai*b+c;
        c=w/10,w%=10;
        ans=char(w+'0')+ans;
    }
    if(c)
        ans=ltoh(c)+ans;
    return delz(ans);
}

inline hint mul(hint a,hint b){
    hint ans;
    if(a=="0"||b=="0")
        return "0";
    string w;
    int len=a.size();
    for(int i=len-1;i>=0;i--){
        int ai=a[i]-'0';
        if(ai!=0)
            ans=add(ans,mul(b,ai)+w);
        w=w+"0";
    }
    return delz(ans);
}

inline hint A(int n,int m){
    if(m<0||n<0||m>n) return "0";
    hint ans="1";
    for(int i=n-m+1;i<=n;i++){
        ans=mul(ans,i);
    }
    return ans;
}

int main(){
    cin>>n>>m;
    cout<<mul(A(n,n),add(mul(A(n+2,m-1),m*(2*n+2)),mul(A(n+3,m),n*(n+1))));
    return 0;
}
2024/8/13 10:17
加载中...