• 系数 题解(lucas+思维)


    题目链接

    题目思路

    这个题目的关键就是 答案模3

    要利用这个来突破

    \(y=x^2+x+1\)

    \(y^n=(y+3x)^n\)

    因为\((y+3x)^n=C_n^0y^n+C_n^1y^{n-1}(3x)^1+C_n^2y^{n-2}(3x)^2.....\)

    显然只有\(C_n^0y^n\mod 3\ne 0\)

    那么就可以得证

    \((x^2-2x+1)^n=(x-1)^{2n}\)

    那么\(ans=C_{2n}^k(-1)^{2n-k}\)

    \(C_{2n}^k\)使用lucas求解

    时间复杂度\(O(tlog_3^n)\)

    代码

    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define debug cout<<"I AM HERE"<<endl;
    using namespace std;
    typedef long long ll;
    const int maxn=3e4+5,inf=0x3f3f3f3f,mod=1e9+7;
    const int eps=1e-6;
    ll n,k;
    ll fac[4];
    ll cal(ll a,ll b){
        if(a<b) return 0;
        else    return fac[a]/fac[b]/fac[a-b]%3;
    }
    ll lucas(ll a,ll b){
        if(b==0) return 1;
        return lucas(a/3,b/3)*cal(a%3,b%3)%3;
    }
    signed main(){
        fac[0]=1;
        for(int i=1;i<=3;i++){
            fac[i]=fac[i-1]*i;
        }
        int _;scanf("%d",&_);
        while(_--){
            scanf("%lld%ld",&n,&k);
            ll ans=lucas(2*n,k);
            if(k%2==1) ans=(-ans+3)%3;
            printf("%lld\n",ans);
        }
        return 0;
    }
    
    
    不摆烂了,写题
  • 相关阅读:
    TCP和UDP区别
    session和cookie的区别
    2019 腾讯正式批笔试题题解
    modCount干嘛的
    分布式系统唯一ID生成方案汇总
    分布式数据库名词
    快手第一题
    南柯一梦
    349. 两个数组的交集
    synchronized锁优化
  • 原文地址:https://www.cnblogs.com/hunxuewangzi/p/14451650.html
Copyright © 2020-2023  润新知