塗顏色(數論,大資料輸入處理)

sdauguanweihong發表於2019-01-29

連結: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

備註:

1≤n,m≤10100000
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

#define ll long long
const ll mod =1e9+7;
using namespace std;
string s1,s2;
ll num(string s)
{ll sum=0;
    for(int i=0;i<s.length();i++)
        sum=(sum*10+(s[i]-'0'))%(mod-1);
    return sum;
}
ll quickpow(ll a,ll b,ll m)
{ll ans=1;
    while(b)
    {
        if(b&1)
        {
            b--;
            ans=ans*a%m;
        }
        b>>=1;
        a=a*a%m;
    }
    return ans%m;

}
int main()
{
    cin>>s1>>s2;
    ll n,m;
    n=num(s1);
    m=num(s2);
    printf("%lld\n",quickpow(2,n,mod));
    return 0;
}

 

相關文章