zoukankan      html  css  js  c++  java
  • BZOJ 4002 有意义的字符串

    WA一下午的原因是矩阵有两个值打反了。。。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define ll unsigned long long
    #define mod 7528443412579576937UL
    using namespace std;
    struct matrix
    {
        ll a[3][3];
    }p,q;
    ll b,d,n;
    ll read()
    {
        char ch;ll data=0;
        while (ch<'0' || ch>'9') ch=getchar();
        while (ch>='0' && ch<='9')
        {
            data=data*10+ch-'0';
            ch=getchar();
        }
        return data;
    }
    ll mull(ll a,ll b)
    {
        a%=mod;b%=mod;
        ll ans=0,base=b;
        while (a)
        {
            if (a&1) ans=(ans+base)%mod;
            base=(base+base)%mod;
            a>>=1;
        }
        return ans;
    }
    void get_table()
    {
        p.a[1][1]=2;p.a[1][2]=b;
        q.a[1][1]=0;q.a[2][1]=1;q.a[1][2]=(d-b*b)/4;q.a[2][2]=b;
    }
    matrix mul(matrix a,matrix b)
    {
        matrix c;
        for (ll i=0;i<=2;i++)
            for (ll j=0;j<=2;j++)
                c.a[i][j]=0;
        for (ll i=1;i<=2;i++)
            for (ll j=1;j<=2;j++)
                for (ll k=1;k<=2;k++)
                    c.a[i][j]=(c.a[i][j]+mull(a.a[i][k],b.a[k][j]))%mod;
        return c;
    }
    void f_pow(ll y)
    {
        matrix base=q;
        while (y)
        {
            if (y&1) p=mul(p,base);
            base=mul(base,base);
                y>>=1;
        }
    }
    int main()
    {
        b=read();d=read();n=read();
        get_table();
        f_pow(n);
        if (b*n==d) printf("%lld
    ",p.a[1][1]%mod);
        else if (n%2) printf("%lld
    ",p.a[1][1]%mod);
        else printf("%lld
    ",(p.a[1][1]-1+mod)%mod);
        return 0;
    }
  • 相关阅读:
    00 vue源码里面常见方法
    vue 组件
    vue 样式
    vue 表单
    网络技术:NAT 网络地址转换
    网络技术:ACL 访问控制列表
    网络技术:VLAN 虚拟局域网
    Java程序设计——购物车系统
    网络 2011-2012 C 语言第三次作业批改总结
    第一用CSS
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/5970919.html
Copyright © 2011-2022 走看看