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...