xdoj1057 卡爾的技能

2021-08-17 12:45:23 字數 1093 閱讀 4597

時間限制: 1 sec  

記憶體限制: 128 mb

提交: 120  

解決: 51 [

提交][

狀態][

討論版]

dota中的英雄卡爾的技能說明如下,他擁有3種不同的元素(冰,雷,火),每次他需要釋放技能的時候,他要先選擇3次元素來決定釋放技能的型別(比如,他可以選擇火+火+火或冰+雷+火等等),生成技能的型別由選擇的元素中各個元素的比例決定,比如選擇冰+冰+雷和選擇冰+雷+冰會生成同樣的技能,這種機制下,卡爾一共擁有10個技能。

冰+冰+冰:急速冷卻

冰+冰+雷:幽靈漫步

冰+冰+火:寒冰之牆

雷+雷+冰:強襲颶風

雷+雷+雷:電磁脈衝

雷+雷+火:靈動迅捷

火+火+火:炎陽衝擊

火+火+雷:混沌隕石

冰+雷+火:超震聲波

火+火+冰:熔爐精靈

現在,為了加強卡爾,使可供選擇的元素達到n個(3<=n<=10^12),選擇的次數達到m次(3<=m<=10^12),那麼卡爾頭疼了,他到底能擁有多少種不同的技能呢?

多組資料

每組資料報含兩個整數,n和m

對於每組資料輸出一行,即對應的結果(答案對10007取模)

3 3

3 4

10

15

思路:把幾次選擇看成相同的小球,每個屬性看成不同的盒子,小球入盒,盒可為空。用lucas求解。用白書上的板子死活不對,無奈,從網上找了一套板子。

上**:

#include//lucas定理的板子 

using namespace std;

typedef long long ll;

ll f[10008];

const int p=10007;

void init()

ll pow(ll a,int b)

return ans;

} ll c(ll a,int b)

ll lucas(ll n,ll m)

int main()

return 0;

}

XDOJ括號匹配

類別 字串處理 時間限制 2s記憶體限制 1000kb 問題描述 表示式中的合法括號為 這三種括號可以按照任意的次序巢狀使用。請寫乙個程式,判斷給定表示式中的括號是否匹配,既左右括號順序和數量都匹配。輸入說明 輸入為乙個表示式字串,長度不超過50。輸出說明 對輸入的表示式,若其中的括號是匹配的,則輸...

XDOJ快速排序

問題描述 採用快速排序演算法,排序輸入的n個整數,prvotkey 樞軸 每次選取陣列第乙個數。輸出快速排序第一趟排序的結果。輸入格式 輸入的第一行包括乙個整數n 1 n 100 接下來的一行包括n個整數,空格隔開。輸出格式 按照要求排序後輸出,由空格分隔。樣例輸入 50 10 90 30 70 4...

XDOJ 分配寶藏

問題描述 兩個尋寶者找到乙個寶藏,裡面包含n件物品,每件物品的價值分別是w 0 w 1 w n 1 suma代表尋寶者a所獲物品價值總和,sumb代表尋寶者b所獲物品價值總和,請問怎麼分配才能使得兩人所獲物品價值總和差距最小,即兩人所獲物品價值總和之差的絕對值 suma sumb 最小。輸入說明 輸...