找出有多少個序列滿足,和為n(n<=1e18),每個元素mod m(m<=100)都不同。
結果mod大質數。
我們可以先求出每個元素mod m後,序列得到某個和的方案數。然後可以一直+m達到n。
設f[i][j]表示序列中每個元素mod m後,得到的和為i,並且序列中有j個數,保證這j個數互不相同
for k:=0 to m-1 do
for i:=1 to m do
for j:=i*m downto 1 do
f[j][i]+=f[j-k][k-1]
列舉i,j後,給序列中的任意元素加上若干個m,使得和為n。
首先序列排序有j!,然後設還要加x=(n-i)/m個m,就要給這j個數分配x個m。
那麼就是乙個隔板問題。
所以i,j的貢獻就是$$f[i][j]i!c_^$$
然後c可以遞推求。
給出m個修改操作和詢問操作,和n個辦公室。每個辦公室在乙個修改操作後會有一條直線(起始位置(x,y),斜率)
詢問操作問[l,r]的直線與x=x交點的y座標最大值。保證修改操作和詢問操作中的x遞增。
n,m<=1e5
容易發現我們可以做到o(1)修改,o(n)查詢。
考慮分塊,平衡複雜度。
給每個塊維護乙個單調佇列,按斜率排序,表示乙個下凸殼。
修改操作就直接暴力重構單調佇列。
詢問操作就暴力查詢每個單調佇列,和落單的元素。
一張由10^17個結點組成的樹,2是根節點。
編號i的父親為j,其中滿足i是1~j-1中任意乙個數的倍數,但不是j的倍數。詢問區間a~b,算出其中每個節點到根節點的距離和。
j是i的父親,當且僅當\(g[j-1]|i,g[j]!|i\),其中\(g[i]=lcm(1..i)\)。
那麼處理出g後,發現大於41的父親都小於41,所以暴力出前41的ans,那麼ans[i]=ans[fa[i]]+1,i>41。
列舉父親i,要求出有多少個數是g[i-1]的倍數,而不是g[i]的倍數,設為h[i]。
由於g[i]是g[i-1]的倍數,所以不是g[i-1]的倍數,則一定不是g[i]的倍數。
用樹狀陣列套動態開點的線段樹。
然後每顆線段樹就獨立開來,用樹狀陣列做差分。
ACM各類題集
基礎演算法 列舉 poj1573 flip game ac poj2965 the pilots brothers refrigerator 貪心 遞推 模擬 分治 二分 三分 搜尋 動態規劃 dp題集 數學 博弈類 poj1067ac hdu2516ac 斐波那契數列 acdream 無恥的出題人...
寒假水題集
2月1日 1 uvalive 4864 很水的數字dp 2 cf81d 隨便構造 好像我用的那個構造本來是錯的,但是ac了 3 uvalive 5058 似乎涉及到拓撲序,組合數之類,但是要先構造一棵樹 4 cf486e 正反兩遍nlogn的lis得到的資訊 2月2日 1 cfgym 100016d...
JS原型題集
1 題目如下 var fun function fun.prototype var a new fun var b new fun console.log a.name,b.name peter peter fun.prototype.name jack console.log a.name,b.n...