大連區域賽的銅牌題,雖然只是銅牌題我也想了好一會,感覺這場區域賽挺不好打呀。
貪心策略我是這樣想出來的,先令n=25把,寫成34567乘積最大,假如n被迫變小呢?34567->24567->23567->23467---->23456,這樣最划算對吧,那麼接下來?23456->3457,因為長度被迫-1了,and then,3457->3456->2456->2356---->2345,反正總以這個順序往2345678.....的序列靠就對了。那麼很簡單,預處理這樣連續串的和,對於每個詢問,二分查詢第乙個比他大的是哪個串,然後找找規律,字首積+逆元解決即可,複雜度(t*logn
#include #define ll long long
#define maxn 50050
using namespace std ;
const int mod=1000000007;
ll sum[maxn],inv[maxn],add[maxn];
void init()
{ inv[1]=1;
for(int i=2;i),詳見**。
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最大,並且不能有重複的數字 思路 分解成數量多的小的數字,比分解成數量少的大的數字的乘積更大,這一點我不知道怎麼證明 並且由基本不等式我們可以知道,相等和的兩個數,越接近...
HDU 5685 字首 逆元
題意 給出你雜湊值的計算方式,然後多次詢問子串的雜湊值。題解 我們通過觀察雜湊值的計算式子就可以發現是連乘,又是多次詢問,因此我們可以想到打表的方式。字首積即可。ans a,b dp b d p a 1 ans a,b frac ans a,b d p a 1 dp b 然後要注意到取模,所以需要乘...