題意:給出你雜湊值的計算方式,然後多次詢問子串的雜湊值。
題解:我們通過觀察雜湊值的計算式子就可以發現是連乘,又是多次詢問,因此我們可以想到打表的方式。字首積即可。ans
[a,b
]=dp
[b]d
p[a−
1]
ans[a,b] = \frac
ans[a,
b]=d
p[a−
1]dp
[b]
然後要注意到取模,所以需要乘法逆元。用擴歐或者費馬小定理都可以求。
#include
using namespace std;
const
int n =
1e5+
10, mod =
9973
;char s[n]
;int dp[n]
, n, a, b;
intinv
(int x,
int y)
intmain()
for(
int i =
0; i < n;
++i)
}return0;
}
HDU5976 貪心 逆元 字首和
大連區域賽的銅牌題,雖然只是銅牌題我也想了好一會,感覺這場區域賽挺不好打呀。貪心策略我是這樣想出來的,先令n 25把,寫成34567乘積最大,假如n被迫變小呢?34567 24567 23567 23467 23456,這樣最划算對吧,那麼接下來?23456 3457,因為長度被迫 1了,and t...
HDU 5976 逆元,字首和,數論
一些總結 1 乙個數字若是分成任意數字求乘積和最大,則盡量全部分成3 2 分成兩個則是n 2 3 拆成n個,拆成這個數 n 4 不能重複,則優先拆為2,3,4 剩餘 x從後往前平分。逆元應用 求逆元 inv 1 1 1的逆元顯然是1 for i 2 i include define max 1000...
hdu5976 Detachment 逆元 優化
傳送門 題意 給定乙個數x,我們可以把這個數分解成乙個乙個的小的數字a1,a2,a3 定義s a1 a2 a3 問如何分解x使得s最大,並且不能有重複的數字 思路 分解成數量多的小的數字,比分解成數量少的大的數字的乘積更大,這一點我不知道怎麼證明 並且由基本不等式我們可以知道,相等和的兩個數,越接近...