挖坑記 JZOJ 4738 神在夏至祭降下了神諭

2021-07-22 08:00:46 字數 1095 閱讀 4612

乙個長度為n的01序列要分段,每一段的0、1個數不能相差k以上,問有多少種分段方案。

n<=1e5,k<=n

時間限制 1s

空間限制 256m

n^2的dp很容易得出來,在此基礎上優化。

b[i]表示前1~i個數中0、1個數差,則f[i]=sigma(f[j]) (|b[j]-b[i]<=k|)。

建一棵線段樹,表示b[i]這個位置上f[i]的和,無腦查詢即可。

#include

#include

#include

#define maxn 100006

#define fr(i,a,b) for(i=a;i<=b;i++)

using namespace std;

typedef long long ll;

const ll ding=1e9+7;

int i,n,k,a[maxn],b[maxn];

ll s,f[maxn],tr[maxn*8];

void modify(int v,int st,int en,int

x,int

y) int

m=(st+en) >> 1;

if (x

<=m) modify(v+v,st,m,x,y);

else modify(v+v+1,m+1,en,x,y);

tr[v]=(tr[v+v]+tr[v+v+1])%ding;

return;

}void findd(int v,int st,int en,int l,int r)

intm=(st+en) >> 1;

if (r<=m) findd(v+v,st,m,l,r);

else

if (l>m) findd(v+v+1,m+1,en,l,r);

else

return;

}int main()

f[0]=1;

modify(1,0,n+n,n,1);

fr(i,1,n)

printf("%lld\n",f[n]);

return

0;}

挖坑記 JZOJ 4727 挺進

一棵樹,求出隨機斷一條邊後,兩個聯通塊直徑和的最大值。n 100000,邊長 100000 時間限制 1s 空間限制 256m 對於樹上每乙個點,預處理出以下資料 1 每棵子樹的根節點到葉節點的最大值 次大值和第三大值d1,d2,d3 2 每棵子樹內直徑長度f 3 每棵子樹的子結點中f son 的最...

挖坑記 JZOJ 4707 艾披索特

一條直線上的n個點,其中第i個點位於數軸上的位置x i 如果從i跳到j,首先要花費時間 x j x i 假如i小於j,還需額外花費時間d i a j 如果i j,需額外花費時間c i b j 已經到過的點無法再次到達。每次可以選擇若干個沒有到過的點,然後在其中乙個點開始,按某種順序跳過所有點,最終跳...

linux上安裝和使用ffmpeg 挖坑記

小結此處照著網上教程坑略多,務必看完再動手。sudo configure enable shared prefix usr local ffmpeg如果提示yasm版本太舊則安裝一下 sudo apt get install yasm然後再次執行上面的命令即可 ps 這裡僅簡單安裝,configur...