1. 程式人生 > >中石油新生賽第八場 問題 F: 量子計算

中石油新生賽第八場 問題 F: 量子計算

題目描述
做完基因鎖手術後,小X又被機器狗帶回到了會客艙,外星首領請小X喝了杯龍冠龍井,說道:“此茶乃 G20 峰會專用,對你的術後恢復大有裨益,在送你回地球之前,你可以再問一個問題。”小X問道:“人類這麼多年都未能破譯基因密碼,你們是如何做到的呢?”外星首領答道:“這全靠我們的科學家發明的128 位量子計算機,它的計算速度大約是 2 的 128 次方,而地球上最快的光電計算機目前最快能算到 2 的32 次方左右。”小X夢醒之後上網查閱了一下有關量子計算機的最新發展狀況,發現米國已經在研製 50 位的量子計算機了,聯想到最近發生的中興事件,小X心想一旦量子計算技術再受制於人,那後果就十分嚴重了,於是小X計劃研製 64 位的量子計算機,他覺得這個任務有些艱鉅,需要找幾位天資聰穎且志同道合的小夥伴來幫助自己,於是就想到了這次的程式設計小能手比賽,小X出了下面這個題目來考考小朋友們,通過的同學將有機會跟小X一起研製量子計算機哦!一個圓被均分成了 n 個區域,現有 m 種可供選擇的顏色給圖中的區域塗色,每一個區域只能塗一種顏色,且相鄰的區域要塗不同的顏色,問有多少種不同的塗色方式?由於結果很大,你只要輸出結果除以10000007 的餘數的值。
以下是 n=5 的時候的圓被分成的樣子。
輸入


輸入資料僅有一行包含兩個用空格隔開的正整數 n,m,即圓被分成了 n 個區域,有 m 種可供選擇的顏色。
輸出
輸出資料僅有一行包含一個整數,表示不同的塗色方式,請輸出對 10000007 求餘後的值。
樣例輸入
複製樣例資料 5 3
樣例輸出
30

提示
10%的資料 m=2
40%的資料 m<=3,n<=15
70%的資料 m<=5,n<=100
100%的資料 m<=100,n<=1000

在圓盤上n個區域,m種顏色,相鄰區域顏色不能相同,塗法總數公式(來自強大的馬鴻儒大佬)

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main() { int n,m,x,y=1,flag=-1; int ans=0; cin>>n>>m; for(int i=1;i<=n;i++) { x=((m-1)*flag)%10000007; y=(y*(m-1))%10000007; flag=-flag; } ans=(ans+x+y)%10000007; cout<<ans<<endl; return 0; }