c491. Hollow Knight boss 出招問題
標籤 : 數學
通過比率 : 1人/6人 ( 17% ) [非即時]
評分方式:
Strictly

最近更新 : 2018-01-24 21:37

內容

你知道四千很喜歡玩Hollow Knight。遊戲中的小騎士,在深入地底探索這充滿bug的世界的同時,也探索自身存在的意義。

這款遊戲最具特色也最有趣的地方便是boss戰裡的各種攻擊招式了。一隻boss擁有M種招式,在血量降為0前不斷選出一種招式攻擊小騎士。四千雖然知道每種招式的躲法,常常卻因為無法及時判斷這是哪種招式而讓小騎士受傷。有天四千發現,一隻boss的出招順序是一個Q循環。將boss的招式編號為0,1,,M1,則第N(1NQ)次的攻擊招式由下方的C函式給出:

long long ChooseAttack(int N){
    long long sum = 0;
    for(int i=0; i<=K; i++){
        long long p = 1;
        for(int j=1; j<=i; j++){
            p = (a[N]*p) % M;
        }
        sum = (sum + c[i]*p) % M;
    }
    return sum;
}

其中K是個全域long long變數,而{ai}i=1Q{ci}i=0K都是全域long long陣列。不幸的是,四千發現他的C compiler又壞了,因為當K=60000時,光是計算ChooseAttack(1)就花了他幾十秒,更別提算完ChooseAttack(2), ChooseAttack(3), ..., ChooseAttack(Q)了。現在他給你M,Q,K,{ai}i=1Q,{ci}i=0K,請你用ZJ的compiler幫他算出ChooseAttack(1), ChooseAttack(2), ..., ChooseAttack(Q)的值。

輸入說明

本題的輸入有T筆測資,請讀至檔案尾。

每筆測試資料佔三行。
第一行有三個正整數M,Q,K
第二行有Q個非負整數a1,a2,,aQ
第三行有K+1個非負整數c0,c1,,cK
每一行的所有整數皆由一個空白隔開,且行末沒有多餘空白。

  • 1T10
  • 1M108
  • 1Q60000,且若T2,保證所有的Q100
  • 1K60000,且若T2,保證所有的K100
  • 0aiM1
  • 0ciM1
輸出說明

對於每筆測試資料,輸出一行,包含Q個介於0M1之間的整數A1,A2,,AQ,其中AN代表這隻boss在第N次攻擊選擇的招式,亦即ChooseAttack(N)的值。

每一行的所有整數應皆由一個空白隔開,且行末不應有多餘空白。

範例輸入 #1
10 4 2
0 1 2 3
1 0 1
8 4 3
7 1 2 2
2 1 0 1
範例輸出 #1
1 2 5 0
0 4 4 4
測資資訊:
記憶體限制: 512 MB
不公開 測資點#0 (10%): 10.0s , <1M
不公開 測資點#1 (10%): 10.0s , <10M
不公開 測資點#2 (10%): 10.0s , <10M
不公開 測資點#3 (10%): 10.0s , <1M
不公開 測資點#4 (10%): 10.0s , <10M
不公開 測資點#5 (10%): 10.0s , <10M
不公開 測資點#6 (10%): 10.0s , <10M
不公開 測資點#7 (10%): 10.0s , <10M
不公開 測資點#8 (10%): 10.0s , <10M
不公開 測資點#9 (10%): 10.0s , <10M
提示 :
  1. 如果你對圖片上的boss戰有興趣,你可以參考這個
  2. 蛤?你問我為什麼M居然會比Q大?我也不知道,可能是因為即便是同一場boss戰,每次生出來的{ai}i=1Q{ci}i=0K都不同吧。
標籤:
數學
出處:
經典問題 [管理者: xavier13540 (柊 四千) ]

本題狀況 本題討論 排行

編號 身分 題目 主題 人氣 發表日期
13281 xavier13540 (柊 四千) c491
作者提供的解法
1101 2018-01-24 22:27