2019 8 1 牛客多校第五場

2021-09-25 19:08:40 字數 2156 閱讀 4092

index > 牛客多校第五場

題號標題

通過率做法狀態a

digits 2

1017/2383

簽到√+

bgenerator 1

555/3660

矩陣快速冪/十進位制優化

cgenerator 2

37/626

dgenerator 3

4/23

eindependent set 1

45/110

fmaximum clique 1

93/838

gsubsequence 1

522/2513

dp√-

hsubsequence 2

286/1366

ithree points 1

139/2701

jthree points 2

7/76

好像我們腦子也不是轉得很快,所以還是廢了點功夫才想到拼接。

比賽時莫名其妙地以為,矩陣乘法也可以尤拉降冪。然後從頭wa到結束。

其實用了乙個很巧妙的想法。

題意就是給乙個公式(顯然是用二維矩陣快速冪求的)。然後給你乙個無比龐大的n(1

01000000

10^10

1000

000)。但是個數存不下來,轉二進位制又非常麻煩。

那麼咋辦?可以直接用十進位制來做呀,我們回顧一下二進位制快速冪就是取二進位制每一位是1的時候,把乘冪處理好的底數乘上去。由於二進位制每位只有兩個選擇,所以比較簡單。

十進位制也完全可以處理底數bas

e=ba

se

10base = base^

base=b

ase1

0,但是二進位制每一位還有9個選擇,那也好辦,如果這一位是x

xx,res

=res

×(ba

se10)

xres =res \times (base^)^

res=re

s×(b

ase1

0)x。

這樣的每次乘冪的次數就降低到10

1010

以下了,這個乘冪還是有必要二進位制快速冪一下,這題卡這個是嚴了一點。但是這樣也避免了全域性轉二進位制太麻煩,而且複雜度也不至於太高。

#define _debug(x) cerr<<#x<<" = "<#include

using

namespace std;

typedef

long

long ll;

template

<

typename _tp,

const

int maxmatrixsize>

struct matrix

matrix

(int _mod)

:mod

(_mod)

void

init1()

inline

void

set(

const

int&r,

const

int&c,

const _tp &v)

inline _tp get

(const

int&r,

const

int&c)

inline

void

setmod

(const _tp &_mod)

inline matrix operator*(

const matrix t)};

typedef matrix2> mat;

mat a, b;

ll x0, x1, a, b;

ll mo, len;

char n[

1000059];

inline mat fpow

(mat base, ll exp)

return res;

}inline ll calc()

res = a * res;

return res.

get(0,

0);}

intmain()

/***

/

牛客多校(第五場)E room

將乙個房間當做乙個點,後來的房間與之前的房間中不用搬的人作為權值,建圖,跑最大權匹配,就是不用搬的人數,在減一下即可,km演算法,o n 3 include include include includeusing namespace std define n 200 define inf 0x3f...

2018牛客多校第五場 H subseq

傳送門 這場樹狀陣列用法專場,skydec說這題很套路的題,很簡單,然而處理處dp陣列後最後的貪心我想了半天還問了一蛤別人,菜不成聲.jpg,先處理出dp陣列,dp i 表示以a i 為開頭的從i到n的所有遞增子串行的方案數,本來應該用線段樹了,然而好多人使用了神奇的樹狀陣列,以前都是add函式從i...

2020牛客多校第五場H

乙個數轉為二進位制後,最多有log位,所以減小後的個數最多只有log位,加上二分,複雜度為平方級的,主席樹也是log級的,所以總複雜度為 nlog2n mlogn 可能常數偏大 ac include include include include include include include de...