zoukankan      html  css  js  c++  java
  • BZOJ 3240 矩阵游戏

    矩阵不要乱用欧拉定理。。。。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define mod 1000000007
    #define maxn 1000050
    using namespace std;
    char n[maxn],m[maxn];
    long long n1,n2,m1,m2,k,k1,k2,a,b,c,d,ans;
    long long f_pow(long long a,long long b)
    {
        long long base=a,ans=1;
        while (b)
        {
            if (b&1) ans=(ans*base)%mod;
            base=(base*base)%mod;
            b>>=1;
        }
        return ans;
    }
    long long inv(long long a)
    {
        return f_pow(a,mod-2);
    }
    long long ask(long long k1,long long k2)
    {
        if (k1==1) return n1*k2%mod+1;
        return (f_pow(k1,n2)+(f_pow(k1,n2)-1+mod)%mod*inv(k1-1)%mod*k2%mod)%mod;
    }
    void work1()
    {
        m1=(m1-1+mod)%mod;
        k1=c;k2=b*c%mod*m1%mod+d;k2%=mod;
        ans=ask(k1,k2);
        ans=(ans-d+mod)%mod*inv(c)%mod;
    }
    void work2()
    {
        m2=(m2-2+mod)%(mod-1);
        k1=f_pow(a,m2)*c%mod;k2=b*c%mod*((f_pow(a,m2)-1+mod)%mod)%mod*inv(a-1)%mod+d;
        ans=ask(k1,k2);
        ans=(ans-d+mod)%mod*inv(c)%mod;
    }
    int main()
    {
        long long l;
        scanf("%s",n);l=strlen(n);
        for (long long i=0;i<l;i++)
        {
            n1=(n1*10+n[i]-'0')%mod;
            n2=(n2*10+n[i]-'0')%(mod-1);
        }
        scanf("%s",m);l=strlen(m);
        for (long long i=0;i<l;i++)
        {
            m1=(m1*10+m[i]-'0')%mod;
            m2=(m2*10+m[i]-'0')%(mod-1);
        }
        scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
        if (a==1) work1();
        else work2();
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    撕衣服
    寒假作业1编程总结。
    C Traps and Pitfallss
    《彻底搞定C指针》文档整理
    C语言中内存分配 (转)
    ASCII
    ipad
    tour
    Diet
    第7章 输入与输出
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/6370527.html
Copyright © 2011-2022 走看看