CSU 1769: 想打架嗎?算我一個!所有人,都過來!(3)
題目:
Description
現在《爐石傳說》這款卡牌遊戲已經風靡全球。2015年加入環境的“黑石山的火焰”擴充套件帶來了一個新套牌的核心卡片“恐怖的奴隸主”,而這套統治遊戲的套牌叫做“奴隸戰”。“恐怖的奴隸主”的登場音效“想打架嗎?算我一個!”一定在所有這個時代的《爐石傳說》玩家心裡留下來難以磨滅的印象。
“恐怖的奴隸主”是一個有3點生命值的生物,當其在場上受到非致命傷害時(如3點生命值的奴隸主受到1點或2點傷害時,或者2點生命值的奴隸主受到1點傷害時)會召喚一個新的3點生命值的“恐怖的奴隸主”,受到致命傷害(傷害大於等於現有生命值)時則會直接死去。另外一類卡片可以使全部生物造成1點傷害(降低1點生命),被稱為“旋風斬效果”。因此“恐怖的奴隸主”,在場上經過多次“旋風斬效果”就可能由一個變成很多個,同時發出那個令人恐懼的聲音“所有人,都過來!”。
另一方面,《爐石傳說》規定,場上最多存在7個生物,這極大地限制了“恐怖的奴隸主”“越生越多”。當一次“旋風斬效果”發生時,優先處理受到非致命傷害的“恐怖的奴隸主”,召喚新的“恐怖的奴隸主”,直到生物數量達到7個不再繼續召喚新的“恐怖的奴隸主”,然後清除掉生命值降為0或0以下的“恐怖奴隸主”。如場上有7個生命值為1的“恐怖的奴隸主”,則一次“旋風斬效果”後場上有0個“恐怖的奴隸主”。又如,場上有6個生命值為3的“恐怖的奴隸主”,則一次“旋風斬效果”後場上有6個2點生命的“恐怖的奴隸主”以及1個3點生命的“恐怖的奴隸主”。又如,場上有4個1點生命的“恐怖的奴隸主”以及2個2點生命的“恐怖的奴隸主”,則一次“旋風斬效果”後場上有2個1點生命的“恐怖的奴隸主”以及1個3點生命的“恐怖的奴隸主”。
在本系列題目2中我們已經知道了如何計算多個“恐怖的奴隸主”在經歷n次旋風斬效果後會剩下多少。現在遊戲出現了bug,場上奴隸主的個數不再受到7個的上限限制了。場上剩下了一些1點生命,一些2點生命,一些3點生命的奴隸主,現在問這些奴隸主經過n次旋風斬效果,場面會變成什麼樣子。
Input
有多組資料。
每組資料一行,hp1,hp2,hp3,n(0<=hp1,hp2,hp3<=10^9,0<=n<=10^6)
分別代表1點生命,2點生命,3點生命的奴隸主個數,以及之後旋風斬次數。
Output
每組用一行輸出最終總的奴隸主個數(結果對1000000007取模),格式見樣例。
Sample Input
1 1 1 3
3 3 3 2
Sample Output
10
18
看到這個題目,第一感覺自然是斐波那契數列。
如果斐波那契的第n項和第n+1項是c和d,那麼答案就是
t1 = c*h2 % 1000000007;
t2 = d*h3 % 1000000007;
printf("%d\n", (t1 + t2) * 2 % 1000000007);
關鍵就是求c和d
如果n的非常非常大,那麼斐波那契數列肯定會出現2個相鄰的數x,y,x和y都大於1,但是與1模1000000007同餘
如果這個x和y出現的比較早,比如前1000的位置,那麼n可以等價成1000內的某個數。
可惜,事實上我真的去算過x和y的位置,是在第1000000007*2和第1000000007*2+1項的位置。
這讓我想起來好像以前做過這個題目,就是求斐波那契數列的某一項除以1000000007的餘數,可惜不記得在哪做的了。
之所以想起來這個是因為我想起來1000000007是1個質數(確實是的)。
這應該是斐波那契數列的性質吧,我就不深究了。(好懶的作者)
如果n是比1000000007大好多的數,第一步就是利用這個迴圈的規律把n變小。
這個題目n要小很多,這個步驟就省略了。
然後到底怎麼求c和d呢?
要用到矩陣快速冪,也就是用二分遞迴的方法,求出一個矩陣的高次冪。
這個題目很多地方都要注意越界的問題,有趣的是,1000000007剛好接近int值的最大值的一半
程式碼:
#include<iostream>
using namespace std;
long long a, b, c, d;
long long x1, x2, x3, x4;
void f(int n)
{
if (n == 0)
{
a = 1;
b = 0;
c = 0;
d = 1;
return;
}
f(n / 2);
x1 = a*a + b*c;
x2 = (a + d)*b;
x3 = (a + d)*c;
x4 = b*c + d*d;
a = x1 % 1000000007;
b = x2 % 1000000007;
c = x3 % 1000000007;
d = x4 % 1000000007;
if (n % 2)
{
c += a;
a = c - a;
d += b;
b = d - b;
}
}
int main()
{
int h1, h2, h3, n;
long long t1, t2;
while (scanf("%d %d %d %d", &h1, &h2, &h3, &n) != EOF)
{
f(n);
t1 = c*h2 % 1000000007;
t2 = d*h3 % 1000000007;
printf("%d\n", (t1 + t2) * 2 % 1000000007);
}
return 0;
}
相關推薦
CSU 1769: 想打架嗎?算我一個!所有人,都過來!(3)
題目: Description 現在《爐石傳說》這款卡牌遊戲已經風靡全球。2015年加入環境的“黑石山的火焰”擴充套件帶來了一個新套牌的核心卡片“恐怖的奴隸主”,而這套統治遊戲的套牌叫做“奴隸戰”。“恐怖的奴隸主”的登場音效“想打架嗎?算我一個!”一定在所有這個
CSU 1723: 想打架嗎?算我一個!所有人,都過來!
題目: Description 現在《爐石傳說》這款卡牌遊戲已經風靡全球。2015年加入環境的“黑石山的火焰”擴充套件帶來了一個新套牌的核心卡片“恐怖的奴隸主”,而這套統治遊戲的套牌叫做“奴隸戰”。“恐怖的奴隸主”的登場音效“想打架嗎?算我一個!”一定在所有這個時
csuoj-1723-想打架嗎?算我一個!所有人,都過來!
Description 現在《爐石傳說》這款卡牌遊戲已經風靡全球。2015年加入環境的“黑石山的火焰”擴充套件帶來了一個新套牌的核心卡片“恐怖的奴隸主”,而這套統治遊戲的套牌叫做“奴隸戰”。“恐怖
某外包程式設計師吐槽:我一個外包公司員工,你拿阿里價值觀壓我?
對於很多大型公司而言,除了正式員工之外,還會有一些第三方員工,也被稱為外包員工。他們雖然在該公司工作,但並不是該公司的員工,而是和外包公司簽訂合同後派駐到該公司工作,不過考勤和工作任務同正式員工一樣,需要聽從安排。像華為阿里騰訊之類的公司,都有外包員工的存在。無獨有偶,一名阿里外包程式設計師在網路論
OE 了我一個小時的題目,不知道有什麼錯兒~
#include <stdio.h> #include <string.h> char a[101],b[101]; int a1[101],b1[101],c1[101]; int main&nbs
求階乘,輸入一個正整數 n,輸出n!
factor i++ print 階乘 pri tor n) printf main #include<stdio.h>int factorial (int n); int main(){ int n; scanf("%d",&n); printf("
領導週末臨時叫程式設計師處理bug,程式設計師:我是來上班的,不賣身!
程式設計師是吃青春飯的行業嗎?這個問題放在國內,很多人都會表示認同,君不見,很多網際網路企業招聘程式設計師,年紀三十多歲的一般就不考慮了,比如華為,前段時間就盛傳清退35歲以上的員工,雖然沒有得到官方證實,但空穴不來風。華為好歹設了一個35歲的標準,可是近日一名網友的爆料卻讓更多的程式設計師顫抖:一
強!一位程式設計師大佬用Python做了一個大資料搜尋引擎,真牛皮!
索是大資料領域裡常見的需求。Splunk和ELK分別是該領域在非開源和開源領域裡的領導者。本文利用很少的Python程式碼實現了一個基本的資料搜尋功能,試圖讓大家理解大資料搜尋的基本原理。 布隆過濾器 (Bloom Filter) 第一步我們先要實現一個布隆過濾器。 布
厲害了!如何Python寫一個安卓APP,附原始碼!
熱文導讀 | 點選標題閱讀 作者: “又耳的筆記本” 文末附原始碼地址 來源:http://youerning.blog.51cto.com/10513771/1733534 本文會帶大家寫一個Hello world並瞧一瞧Python版實現的android 2048的程式碼 前言
實驗報告:(1)合理定義一個三角形類Triangle,成員屬性包括3條邊,能否構成三角形的標誌;成員方法包括構造方法、修改3條邊、計算面積。 (2)寫一測試類,測試自定義三角形類Triangle是否正
(1)合理定義一個三角形類Triangle,成員屬性包括3條邊,能否構成三角形的標誌;成員方法包括構造方法、修改3條邊、計算面積。(2)寫一測試類,測試自定義三角形類Triangle是否正確。class Triangle_D{ private double f_edge;
linux中讀取網絡卡資訊(ip, mask, mac)以及判斷物理網線是否插好的C程式---我親自試了一下,還不錯!
說明: 我主要轉載如下兩篇文章, 但本文中加入了自己的一些描述 轉載地址一:http://blog.chinaunix.net/uid-20692625-id-3172833.html 轉載地址二:http://blog.chinaun
DXLib 主頁,簡單翻譯(我其實看不懂,都是瞎掰的)
原文地址: Dx Library 的小院 DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。(使用する際はC
一個有趣的測試,相當神奇!
沒人逃得過的超準思維定向測試! ★★★切記要慢慢,請不要第一次就看完了全部!一定要慢慢的往下看!這樣你才能真 的體會到真的很很詭異的喔! 請第一次看到這個測試的朋友,首先靜下心來,認真的,快速的用自己的心算來 坐下面這個測試,看清楚要求,真實的說出當時的第一個腦子
比特幣真的安全嗎?我居然生成了一個和別人一樣的私鑰
比特幣的私鑰長度為256位,理論上有2的256次方種情況,這是一個非常龐大的數字,科學研究宇宙中的原子個數大約為10的80次方,2的256次方大約等於10的77次方。所以隨機生成一個私鑰,出現重複的概率是相當小的,這也是比特幣安全性的保障。概率雖小但還是會出現,今天就被我遇到了。 今天用程式隨機生成了一個私
我一天累死累活爬四百萬資料!老闆一個月才給10K!我該離職嗎?
環境、架構: 開發語言:Python2.7 Python3.6 開發環境:64位Windows8系統,4G記憶體,i7-3612QM處理器。 資料庫:MongoDB 3.2.0 (Python編輯器:Pycharm 5.0.4;MongoDB管理工具:Mong
一個63+8!一個75+7!你見過這樣神仙打架嗎?
11月29日訊息,@北京商報從度小滿金融人士處獲悉,百度正式拿到准許經營證券期貨的許可證。據許可證顯示,機構名稱為北京百度百盈科技有限公司(下稱“百度百盈”),證券期貨業務經營範圍為基金銷售。而今年8月22日,根據北京證監局官網顯示,證監局已核准百度百盈證券投資基金銷售業務資格。 企查查資訊顯示,百度百盈成
想要那種有提示聲音的網站嗎?我教你怎麼做!
您有新的外賣訂單請及時查收! 熟悉不能再熟悉的聲音了,今天小編就做了這樣一個網站的提示新訂單的功能,接下來就教你怎麼玩轉這個小功能! 首先我們前端的程式碼是這樣寫的: var playSound = function () { va
“媽媽,我不想學了”,你的回答改變孩子一生(悵然若失,說了一句話:“為什麼當初沒有人逼我?”。我不願意學,你就不讓我學啦!那時候我還小,我還不懂事,難道你也不懂事嗎。要做成一件事,就必須有延遲滿足的能力)
“媽媽,我不想學了”,你的回答改變孩子一生(組圖)新聞來源: 槽值 前兩天,送孩子去書法班的時候,在小區門口看到一位媽媽,她正拽著孩子往車裡進,孩子哭著掙扎:“我不想學舞蹈了,我不去,太累了……” 媽媽怒吼著:“你今天去也得去,不去也得給我去!” 最終,孩子還是拗不過媽媽,上了車,去學舞蹈。 我不禁想
我是一個新手小白,想學習C++程式設計,但是不知道該如何入手。請大神們給出一個簡單的思路。
如題所示,我現在準備學習C++程式語言,因為是0基礎,所以入門也顯的很迷茫,也看過一些視訊,感覺講的很好,但就是聽得雲裡霧裡,看著視訊也會嘗試敲一些程式碼,但是程式碼的意思,也都不懂,不知道該如何入手,所以就想到,如果要
能能送我一個降噪耳機嗎?
.cn log href ack 關註 lin ima ati family ? 文章來源:劉俊濤的博客 歡迎關註,有問題一起學習歡迎留言、評論能能送我一個降噪耳機嗎?