zoukankan      html  css  js  c++  java
  • 牛客寒假算法基础集训营4 E Applese 涂颜色

    链接:https://ac.nowcoder.com/acm/contest/330/E
    来源:牛客网

    题目描述


    精通程序设计的 Applese 叕写了一个游戏。

    在这个游戏中,有一个 n 行 m 列的方阵。现在它要为这个方阵涂上黑白两种颜色。规定左右相邻两格的颜色不能相同。请你帮它统计一下有多少种涂色的方法。由于答案很大,你需要将答案对 109+7109+7 取模。

    输入描述:

    仅一行两个正整数 n, m,表示方阵的大小。

    输出描述:

    输出一个正整数,表示方案数对 109+7109+7 取模。
    示例1

    输入

    复制
    1 1

    输出

    复制
    2
    示例2

    输入

    复制
    2 2

    输出

    复制
    4

    备注:

    1n,m10100000
    欧拉降幂加快速幂解决
    这些不会的自学百度吧。。或者CSDN上也有很多大佬的解释
    对于这个题一个比较显然的结论是,对于每一行有2种涂色方法。
    因为只是要左右不同所以前一行不影响后一行因此答案就是 2^n 。
    ac代码(c++)
    #include <stdio.h>
    #include<string.h>
    typedef long long ll;
    char a[1000006];
    ll x,z;
    ll quickpow(ll x,ll y,ll z)
    {
        ll ans=1;
        while(y)
        {
            if(y&1)
                ans=ans*x%z;
            x=x*x%z;
            y>>=1;
        }
        return ans;
    }
    ll phi(ll n)
    {
        ll i,rea=n;
        for(i=2;i*i<=n;i++)
        {
            if(n%i==0)
            {
                rea=rea-rea/i;
                while(n%i==0)
                    n/=i;
             }
        }
        if(n>1)
            rea=rea-rea/n;
        return rea;
    }
    int main()
    {
        while(scanf("%lld %s %lld",&x,a,&z)!=EOF)
        {
            ll len=strlen(a);
            ll p=phi(z);
            ll ans=0;
            for(ll i=0;i<len;i++)
                ans=(ans*10+a[i]-'0')%p;
            ans+=p;
            printf("%lld
    ",quickpow(x,ans,z));
        }
        return 0;
    }

    然后是py的。。py对于大数处理真滴太方便了。呜呜呜,哭了

    print(pow(2, int(input().split()[0]), 10**9 + 7))

  • 相关阅读:
    linux开放防火墙端口方法
    Node.js 构建TCP服务
    React高阶组件
    在create-react-app 中启用装饰器语法
    Redux
    微信小程序组件与组件之间的通讯
    微信小程序网络请求
    微信小程序的页面导航跳转
    sqoop2启动job报错
    sqoop2启动client异常
  • 原文地址:https://www.cnblogs.com/tp25959/p/10350612.html
Copyright © 2011-2022 走看看