zoukankan      html  css  js  c++  java
  • 【NOIP2012模拟10.6】填充棋盘

    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取模后的值。
    

    题解

    1 2 5
    3 4 6
    7 8 9
    首先在左上角确定1、2、3、4,向5、6方向扩展方案总数乘2,向7、8方向扩展总数也乘2,这十分显然。再看4、6、8、9,而4、6、8在之前已今被确定了,9自然被确定了,为了符合题意,4、6、8、9只有十二种合法方案。
    即总方案数为 (2^(n-1)+2^(m-1)-2)*12 。

    代码

    const
      mo=1000000007;
    var
      n,m:int64;
    
    function mi(x:int64):int64;
    begin
      if x=0 then exit(1) else
        begin
          mi:=sqr(mi(x div 2)) mod mo;
          if odd(x) then
          mi:=(mi*2) mod mo;
          exit(mi);
        end;
    end;
    
    procedure main;
    var
      ans:int64;
    begin
      ans:=(mi(n-1)+mi(m-1)-2) mod mo;
      ans:=(ans*12) mod mo;
      write(ans);
    end;
    
    begin
      readln(n,m);
      main;
    end.
    
    
  • 相关阅读:
    APP开发的模式
    微信小程序的传值方式
    面试题总结
    github上传文件的步骤
    python使用笔记15--操作Excel
    python使用笔记14--商品管理小练习
    python使用笔记13--清理日志小练习
    python使用笔记12--操作mysql数据库
    python使用笔记11--时间模块
    python使用笔记10--os,sy模块
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9319568.html
Copyright © 2011-2022 走看看