牛客練習賽48 部分題解

2021-09-24 16:06:54 字數 2375 閱讀 1700

b. 小w的a=b問題

思路:把階乘hash就行
#include

#define ll long long

using namespace std;

const

int maxn =

1e5+

10, n =

1e5;

const

int mod1 =

1e9+

7, mod2 =

998244353

;ll p1[maxn]

, p2[maxn]

;int

main()

int t;

cin>>t;

while

(t--

) ll s3 =

1, s4 =1;

for(

int i =

1; i <= m; i++)if

(s1 == s3 && s2 == s4)

puts

("equal");

else

puts

("unequal");

}}

c. 小w的糖果

我們維護一下差分陣列sum,操作:1 x 就是sum[x]++,操作:2 x 就是sum[x] 到 sum[n] +=1,操作3不好搞了,我們記s陣列也是差分陣列,不過假設s[i] = x,那麼s[i] 真正的值是(2 * i - 1) * x,那麼操作:3 x 可以這樣轉化:s[x] 到 s[n] +=1,sum[x] 到 sum[n] -= 2 * (x - 1),這一步你們自己推一推,我們發現,對於差分陣列區間加減法,可以再進行一次差分,差分套差分o(n)搞定這題
#include

#define ll long long

using namespace std;

const

int maxn =

1e5+

10, mod =

1e9+7;

ll sum[2]

[maxn]

, a[maxn]

;void

add(ll &x, ll y)

intmain()

}for

(int i =

1; i <= n; i++

)for

(int i =

1; i <= n; i++)}

}

e. 小w的矩陣前k大元素

思路:對於每一次查詢,我們先用兩個set:s1,s2 維護當前a陣列前x個元素和b陣列前y個元素,並且用一顆權值線段樹維護b陣列前y個元素,如果要查詢前k小的元素,我們二分求第k小的元素mid,判斷方法:列舉第乙個set的元素x,從權值線段樹中找 <= mid - x的元素有多少個,然後和k對比就行。假設找到了mid = ans,那麼我們再列舉兩個set的元素 t1, t2,把所有滿足: t1 + t2 < mid 的元素加入優先佇列,然後輸出就行,複雜度:klognlogn
#include

#define ll long long

using namespace std;

const

int maxn =

1e5+

10, m =

1e9;

ll a[maxn]

, b[maxn]

, n =

4e9;

;multiset s1, s2;

priority_queue

, greater

> q;

int sum[maxn *40]

, ls[maxn *40]

, rs[maxn *40]

;int cnt, rt;

voidup(

int& o, ll l, ll r, ll k)

intqu

(int o, ll l, ll r, ll k)

intok

(ll t,

int k)

return0;

}int

main()

else

if(s[0]

=='d'

)else

int res =0;

for(

auto t1 : s1)if(

!flag)

break;}

while

(!q.

empty()

&& d)

while

(d--

)puts(""

);}}

}

牛客練習賽40 題解(部分)

官方題解 a 小d的劇場 大概意思就是,有1 49個數,代表著不同的音符,問你能組成長度為n的串有多少種 mod 109 7 有若干個限制,比如1 2 3,就是1,2,3不能放在一起,然後問你在這些限制下有多少種不同的長度為n的串。3 n 500,0 q 117649,1 a,b,c 49 思路 看...

牛客練習賽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...