zoukankan      html  css  js  c++  java
  • [组合数学]JZOJ 3013 填充棋盘

    Description

    横一划竖一划,横一划竖一划…………小R画出了一个n*m的棋盘。

    由于NOIP快要到了,小R有了一个奇妙的想法。

    在棋盘的每一个小方格中填入N,O,I,P这4个字母中的一个,若棋盘中每一个2*2的小棋盘中都有N,O,I,P这4个字母,小R就认为这个棋盘是幸运棋盘。小R想知道一共有多少种不同的幸运棋盘。由于这个结果可能会很大,你只需输出对1,000,000,007取模后的值。
     

    Input

    两个整数n,m表示棋盘的大小。

    Output

    一个整数表示幸运棋盘的个数对1,000,000,007取模后的值。

     

    Sample Input

    2 3

    Sample Output

    48
     

    Data Constraint

     
     

    Hint

    对于30%的数据,n,m≤10

    对于70%的数据,n,m≤1,000,000

    对于100%的数据,2≤n,m≤2,000,000,000

    分析

    可得公式:6*(2^n+2^m-4)

    具体来看是在棋盘上放置的组合数

    #include <iostream>
    #include <cstdio>
    using namespace std;
    typedef long long ll;
    const ll P=1e9+7;
    ll n,m;
    ll Pow(ll x,ll y) {ll ans=1;for (;y;y>>=1,(x*=x)%=P) (ans*=((y&1)?x:1))%=P;return ans;}
    int main() {
        scanf("%lld%lld",&n,&m);
        printf("%lld",(12*(Pow(2,n-1)+Pow(2,m-1))%P-24+P)%P);
    }
    View Code
    在日渐沉没的世界里,我发现了你。
  • 相关阅读:
    多态
    扩展方法
    git 新账户链接新仓库地址
    获取数据类型
    解构赋值
    var let const 无关键字定义变量
    http
    onmouseover、onmouseout、onmouseenter、onmouseleave
    setInterval、setTimeout、requestAnimationFrame
    vue的prop父子组件传值
  • 原文地址:https://www.cnblogs.com/mastervan/p/11136090.html
Copyright © 2011-2022 走看看