farm 隨機化 二維字首和 牛客

2021-09-25 05:53:34 字數 1434 閱讀 5721

題意:

我們可以用隨機化的解法,將每一種花型別對映成乙個很大的樹,使得不會出現施兩次3型別的肥3+3到型別為6的花上,剛好施完肥的總價值val%type==0,出現誤算,對映完後出現這種情況的概率會變得很小

可以說這種演算法看運氣吧

注意邊界問題,用二維字首和維護就行

#include

using

namespace std;

typedef

long

long ll;

const

int maxn=

1e6+5;

int n,m,t;

vector a[maxn]

;ll has[maxn]

;vector b[maxn]

;void

myhash

(int m)

}void

add(

int x1,

int y1,

int x2,

int y2,ll k)

intmain()

}for

(int i=

1;i<=t;i++

)int ans=0;

for(

int i=

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

(j!=1)

if(i!=

1&&j!=1)

if(b[i]

[j]%a[i]

[j]!=

0) ans++;}

} cout<}

第二種:
#include

using

namespace std;

const

int maxn =

1000005

;int n, m, t;

int a[maxn]

, bn[2]

[maxn]

;// bn[0]和bn[1]記錄每一位分別為0和1時候的差分陣列,每運算一次清一次零

bool vis[maxn]

;//標記哪些位置是死掉的

struct p b[maxn]

;intid(

int x,

int y)

void

add(

int i,

int*s)

void

work

(int

*s)}

intmain()

}int ans =0;

for(

int i =

0; i < n * m; i++

)printf

("%d\n"

, ans);}

return0;

}

牛客 雷射炸彈(二維字首和)

二維字首和顧名思義,用乙個點去代表乙個矩形,查詢的時間是o 1 sum i j 表示 0,0 到 i,j 的字首和。先給出遞推公式sum i j map i j sum i 1 j sum i j 1 sum i 1 j 1 看圖就知道了,sum i j 表示的是藍區域紅區域加黃區域再加右下角那個 ...

牛客多校第二場Jfarm(隨機化演算法)

牛客多校第二場jfarm 隨機化演算法 題目大意 有一塊大小為n m的農田,每乙個地上都種著種類為a i j 的植物,接下來要進行t次農藥噴灑,每次會對左上角為 x1,y1 右下角為 x2,y2 的矩陣噴灑型別為k的農藥,如果被噴灑的植物的種類和農藥的種類不同 也就是a i j k 這個植物就會死掉...

牛客多校第二場 J(隨機 矩陣二維字首和)

時間限制 c c 4秒,其他語言8秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld the first line of input contains 3 integers n,m,t n m 1000000,t 1000000 for the ne...