zoukankan      html  css  js  c++  java
  • [CQOI2018]九连环

    手写压位高精即可通过

    #include"cstdio"
    #include"cstring"
    #include"iostream"
    #include"algorithm"
    using namespace std;
    
    const int MAXN=5505;
    const int siz=9;
    const int MOD=1e9;
    
    int T,n;
    struct Big{
    	long long v[MAXN];
    	
    	void reset(){memset(v,0,sizeof(v));v[0]=1;}
    	
    	void Mul(Big a,Big b)
    	{
    		reset();v[0]=a.v[0]+b.v[0];
    		for(int i=1;i<=a.v[0];++i){
    			for(int j=1;j<=b.v[0];++j){
    				v[i+j-1]+=a.v[i]*b.v[j];
    				if(v[i+j-1]>MOD) v[i+j]+=v[i+j-1]/MOD,v[i+j-1]%=MOD;
    			}
    		}while(v[0]>1&&!v[v[0]]) --v[0];
    		return;
    	}
    	
    	Big Mpw(Big a,int b)
    	{
    		Big x;x.reset();x.v[1]=1;
    		while(b){
    			if(b&1) x.Mul(x,a);
    			b>>=1;a.Mul(a,a);
    		}return x;
    	}
    	
    	void ry()
    	{
    		for(int i=v[0];i>1;--i){
    			v[i-1]+=v[i]%3*MOD;
    			v[i]/=3;
    		}v[1]/=3;
    		while(v[0]>1&&!v[v[0]]) --v[0];
    		return;
    	}
    	
    	void write()
    	{
    		printf("%lld",v[v[0]]);
    		for(int i=v[0]-1;i;--i) printf("%09lld",v[i]);
    		puts("");
    	}
    }V;
    
    int main()
    {
    	scanf("%d",&T);
    	while(T--){
    		scanf("%d",&n);
    		V.reset();V.v[1]=2;
    		V=V.Mpw(V,n+1);--V.v[1];
    		V.ry();V.write();
    	}return 0;
    }
    
  • 相关阅读:
    GIT操作命令
    flask中logger日志的使用
    Flask项目总结学习
    kubernetes容器网络
    Chrome浏览器离线安装包下载
    《Linux防火墙配置》
    Redhat7.4配置本地yum源
    zabbix5利用python脚本发报警邮件和趋势图
    screen命令
    MX记录
  • 原文地址:https://www.cnblogs.com/AH2002/p/10091287.html
Copyright © 2011-2022 走看看