牛客練習賽53 B, C, E 題解

2021-09-28 13:39:31 字數 2311 閱讀 3109

b:美味果凍

更換一下列舉順序得到:

容易發現 i 為 [j,2j),[2j,3j)... [(t-1)*j,t*j)時後面向下取整的結果是一樣的,分塊計算即可,j 次冪通過(j-1)次冪 o(1) 得到,時間複雜度為 o(nlogn)

#include using namespace std;

typedef long long ll;

const int mod = 1e9+7;

const int maxn = 3e6+36;

ll pow[maxn];

inline ll qpow(int a,int x)

ll solve(int n)

tep += 1ll*(n-t*j+1)*(n+t*j)/2%mod*qpow(t,j)%mod; //單獨計算最後非完整的塊

res = (res + tep) % mod;

}return res;

}int main()

c:富豪凱匹配串

ac自動機是不可能的

資料範圍是支援暴力列舉文字串的,那就列舉每乙個文字串,只用把匹配串下劃線對應的位置搞成 0,然後比較二者是否一樣即可,字串只包含0,1,bitset 優化上述兩種操作即可

#include using namespace std;

const int maxn = 1e3+13;

bitsetb[maxn];

int n,m,q;

char s[maxn];

int main()

scanf("%d",&q);

while(q--)

int cnt = 0;

for(int i = 0;i < n; ++i)

printf("%d\n",cnt);

}return 0;

}

e:老瞎眼 pk 小鮮肉

區間異或值為 0,套路的算出每個位置的字首異或和,只要兩個位置的字首異或和一樣,那麼這段區間的異或值就為 0;問題就轉換為求區間內兩個最近的點對,先將詢問離線按右端點排序,依次移動掃瞄指標,求出當前位置的異或字首和,只需要更新這個值上一次出現的位置的最小值即可,因為這兩個點對一定是最近的(僅對於這個異或值作為r來說),那麼掃瞄到詢問直接查詢區間最小值即可

#include using namespace std;

const int maxn = 5e5+55;

const int inf = 0x3f3f3f3f;

int n,m,a[maxn];

struct queryq[maxn];

bool cmp(query a,query b)

int tr[maxn<<2],res[maxn];

void build(int l,int r,int x)

int mid = (l+r)>>1;

build(l,mid,x<<1);

build(mid+1,r,x<<1|1);

}void updata(int l,int r,int pos,int x,int v)

int mid = (l+r) >> 1;

if(pos > mid) updata(mid+1,r,pos,x<<1|1,v);

else updata(l,mid,pos,x<<1,v);

tr[x] = min(tr[x<<1],tr[x<<1|1]);

}void query(int l,int r,int l,int r,int x,int &ans)

int mid = (l+r) >> 1;

query(l,mid,l,r,x<<1,ans);

query(mid+1,r,l,r,x<<1|1,ans);

}mapmp;

int main()

int ans = inf; query(1,n,q[i].l,q[i].r,1,ans);

res[q[i].id] = ans > n ? -1 : ans;

}for(int i = 0;i < m; ++i) printf("%d\n",res[i]);

return 0;

}

牛客練習賽53 ABC

a 簡單dp include define ll long long using namespace std const ll mod 1e9 7 ll d 1000000 2 ll n intmain cout d n 1 d n 0 mod return0 b 分塊 include define...

牛客練習賽22題解

簡單瞎搞題 不會用bitset,所以沒做出來。實際上還是比較簡單的。include using namespace std bitset 1000005 dp 2 int main cout 2 count 簡單資料結構1 這裡要運用拓展尤拉定理。ab modp ab p b p p 0 modp ...

題解 牛客練習賽51

字首a的數量,字尾c的數量,遇到b就計算一次答案。includeusing namespace std typedef long long ll const int n 1e5 100 char s n int cnt n int main int tmp 0 for int i 1 i n i p...