20200717 SCOI模擬T1(計數)

2021-10-08 04:58:55 字數 2783 閱讀 4468

description

毒瘤出題人給了你乙個由且僅由小寫字母構成的字串,並且多次詢問你一段區間的字元組成的字串中,「noi」子串行出現的次數。

輸入輸入資料從noi.in讀入

第一行兩個整數n,m表示字串的長度和詢問次數第二行乙個由小寫字母組成的字串s,下標從1開始標號然後一行乙個整數seed,含義請參見下發檔案random_gen.cpp

輸出輸出到noi.out輸出一行乙個整數,表示所有答案異或和的結果,請使用unsigned long long 自然溢位

data range

對於100%的資料,保證n,m≤5e6。保證所有詢問隨機生成,生成方式見random_gen.cpp。

random_gen.cpp

/*

為了在一定程度上減少輸入的量,毒瘤出題人決定使用隨機法。

你可以將以下這段**複製在你的源程式中,

並在讀入了字串之後直接呼叫rnd::init()來進行隨機的初始化。

之後請使用getquery來獲取每乙個詢問的l,r,各個引數的意義不再作任何說明。

在呼叫任何getquery之前請將rnd中的n賦值為字串的長度。

在能夠保證正確性的情況下,你也可以採用自己寫的隨機函式進行處理。

一切由於沒有按照題目要求進行的操作後果由選手自行承擔。

*/namespace rnd

inline

void

getquery

(int

&l,int

&r)}

using rnd::getquery;

思路

a

ia_i

ai​ 表示i位前n的個數

b

ib_i

bi​ 表示i位後i的個數

則答案為

∑ i=

lr[n

ode[

i]==

"o"]

(ai−

al)(

bi−b

r)

\sum _^r [node[i]=="o"](a_i-a_l)(b_i-b_r)

i=l∑r​

[nod

e[i]

=="o

"](a

i​−a

l​)(

bi​−

br​)

拆開albr

+∑i=

lr[n

ode[

i]==

"o"]

aibi

−al∑

i=lr

[nod

e[i]

=="o

"]bi

−br∑

i=lr

[nod

e[i]

=="o

"]ai

a_lb_r+\sum_^r[node[i]=="o"]a_ib_i\\ -a_l\sum_^r[node[i]=="o"]b_i-b_r\sum_^r[node[i]=="o"]a_i

al​br​

+i=l

∑r​[

node

[i]=

="o"

]ai​

bi​−

al​i

=l∑r

​[no

de[i

]=="

o"]b

i​−b

r​i=

l∑r​

[nod

e[i]

=="o

"]ai

​維護四個字首和即可

**

#include

using

namespace std;

typedef

unsigned

long

long ull;

#define ll long long

namespace io

inline

intin()

}// namespace io

using

namespace io;

namespace rnd

inline

void

getquery

(int

&l,int

&r)}

// namespace rnd

using rnd::getquery;

const

int a =

1e7+5;

int n, m, seed;

int l, r;

char a[a]

;int sn[a]

, si[a]

;ll f1[a]

, f2[a]

, f3[a]

, f4[a]

;inline

void

prepare()

for(

int i = n; i; i--

)for

(int i =

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

return;}

inline ull getans

(int l,

int r)

signed

main()

printf

("%lld\n"

, res)

;return0;

}

某 SCOI 模擬賽 T1 a DP

有 n nn 個單詞,每個單詞出現 c ic i ci 次,現用 與.給單詞編碼,要求任意乙個單詞的編碼不是另乙個的字首。設 的權值為 2,的權值為 1,最小化所有單詞的權值和。n 750 n leq 750 n 750。假設我們已經建好了所有單詞的字典樹,顯然出現次數越多的單詞應該掛在越淺的葉子 ...

20200916 SCOI模擬T1(三分)

思路 設怪物的屬性為 a,b a,ba,b,環境值為 x,y x,yx,y t x yt frac t yx 每個怪的貢獻為 a b at b ta b frac b times t a b ta b t發現是乙個單峰函式 打表發現總貢獻也是單峰的,於是可以三分 開口向上的單峰函式的max也是單峰的...

20200610 SCOI模擬T1(網路流)

思路 矩陣a為乙個n m的矩陣 矩陣a的轉置 a ta t at即為乙個m n的矩陣,其中 ai,jt a j,ia t a ai,jt aj,i 有 a b c ata b a t c at a b c a t a b a t c a t a b c at a b at c at對於b中的乙個數 ...