題意:
我們可以用隨機化的解法,將每一種花型別對映成乙個很大的樹,使得不會出現施兩次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...