照看小貓(快速乘 快速冪取模)

2021-10-21 18:09:48 字數 1527 閱讀 5038

在乙個風和日麗的午後,少佐給薇爾莉特伊芙嘉登安排了乙個任務。

任務大致是這樣的,接下來的一周,薇爾莉特需要照顧 n 只小貓咪。為了方便管理這n 只貓咪,

薇爾莉特準備給每只貓咪取乙個獨一無二的名字。取名字要徵求貓咪本咪的同意才可以。

但這些貓咪都非常有個性,絕不接受很長的名字。

現給出每只貓咪所能容忍名字的長度上限。

請你為所有貓咪取名字,請問共有多少種不同的方案。

名字僅包含小寫英文本母。結果可能非常大,所以請將結果對 77797 取模

如果無方案,請輸出 -1

輸入描述:

第一行,乙個正整數 n 。

第二行, n 個正整數,第 i 個數字 a_iai​

,表示第 i 只貓咪所能容忍名字的長度上限,數字間以空格隔開。

輸出描述:

第一行,僅輸出 1 個數,取模後的總方案數 x 。ps:如果無方案,請輸出 -1

示例1輸入複製1

1輸出複製26

說明貓咪的名字可以為 a-z 間的任意乙個字母,所以方案數為 26。

示例2輸入複製1

2輸出複製702

說明樣例 2 中,貓咪的名字的長度可以為 1,也可以為 2。

長度為 1 時,名字可以為 a-z 中任意乙個,方案數 26 種。

長度為 2 時,名字可以為 aa-az, ba-bz ,…,za-zz 中任意乙個,方案數 26×26=676種。

所以總方案數為 26+676=702 種。

示例3輸入複製5

7 5 8 4 3

輸出複製

9416

備註:100%的資料,1 ≤ n ≤ 10^4,1 ≤ a_i ≤ 101≤n≤10

4,1≤ai​

≤10

#include

using

namespace std;

typedef

long

long ll;

const ll mod=

77797

;const ll maxn=

1e5+

100;

ll a[maxn]

;ll quick_pow

(ll base,ll pow)

//快速冪

return res;

}ll muti

(ll a,ll b)

//快速乘

return res;

}ll sum

(ll x,ll n)

ans-

=(n-1)

%mod;

ans%

=mod;

return ans;

}int

main()

綜合了快速乘、快速冪

取模方面:

(a+b)%mod=(a%mod+b%mod)%mod;

(a-b)%mod=(a%mod-b%mod)%mod;

(ab)%mod=(a%modb%mod)%mod;

ps:借鑑了其他大佬的**

快速乘 快速冪 取模

快速冪 傳統的求冪演算法時間複雜度非常高 為o 指數n 因為當指數n非常大的時候,需要執行的迴圈操作次數也非常大,而快速冪能幫我們以相對更少的時間算出指數非常大的冪。快速乘加法比乘法快。可以用較多的加法來取代乘法來減少時間複雜度 乘法分配律?見 絕不承認自己懶 include define ll l...

快速冪 快速冪取模

快速冪的思想在於快速求解高冪指數的冪運算 複雜度為o log2n 與樸素運算相比有很大的改進 接下來給出 其中有詳解 include include using namespace std typedef long long ll ll pow1 int a,int b 最常規的方法 將冪指數轉化為...

快速冪 快速冪取模

求x m 一般方法是 xm x xm 1,這樣需要做m次乘法,未免過慢。加速方法有兩種。1.基於當m為偶數時,xm x2 m 2 當m為奇數時,xm x xm 1。顯然當m為偶數時m會減半,當m為奇數時,下次就是偶數。m可以很快收斂到0.表示冪 2.將m看成二進位制串mkmk 1 m1m0,那麼xm...