51Nod 1530 穩定方塊

2021-08-04 12:47:20 字數 1682 閱讀 4014

acm模版

很巧妙的利用兩個堆來搞事情,乙個大頂堆,乙個小頂堆,就是優先佇列,維護每次能夠拆除的方塊兒,每拆除乙個向周圍擴充套件一次,並且刪除拆掉的這個方塊兒,這裡用 ma

p 處理。說白了,就是乙個有趣的貪心問題,用到兩種資料結構罷了,st

l ……

#include 

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

const

int maxm = 1e5 + 10;

const ll mod = 1e9 + 9;

int m;

bool vis[maxm];

int x[maxm];

int y[maxm];

ll ans[maxm];

mapint, int>, int> mpi;

bool judge(int a, int b)

}if (mpi[make_pair(a + 1, b + 1)])

}if (mpi[make_pair(a - 1, b + 1)])

}return1;}

template

inline

bool scan_d(t &ret)

while (c != '-' && (c < '0' || c > '9'))

sgn = (c == '-') ? -1 : 1;

ret = (c == '-') ? 0 : (c - '0');

while (c = getchar(), c >= '0' && c <= '9')

ret *= sgn;

return1;}

int main()

priority_queue mx; // 大頂堆

priority_queue

, greater > mn; // 小頂堆

for (int i = 1; i <= m; i++)

}int a, b;

for (int i = 1; i <= m; i++)

else

if (vis[ans[i]])

if (!judge(x[ans[i]], y[ans[i]]))

vis[ans[i]] = 1;

a = x[ans[i]];

b = y[ans[i]];

mpi.erase(make_pair(a, b));

if (mpi[make_pair(a - 1, b - 1)])

}if (mpi[make_pair(a, b - 1)])

}if (mpi[make_pair(a + 1, b - 1)])}}

ll tmp = 1;

ll res = 0;

for (int i = m; i >= 1; i--)

cout

<< res << endl;

return

0;}

51nod 貪心入門

有若干個活動,第i個開始時間和結束時間是 si,fi 活動之間不能交疊,要把活動都安排完,至少需要幾個教室?分析 能否按照之一問題的解法,每個教室安排盡可能多的活動,即按結束時間排序,再貪心選擇不衝突的活動,安排乙個教室之後,剩餘的活動再分配乙個教室,繼續貪心選擇 反例 a 1,2 b 1,4 c ...

51nod 迷宮問題

1459 迷宮遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的...

51nod 硬幣遊戲

有乙個簡單但是很有趣的遊戲。在這個遊戲中有乙個硬幣還有一張桌子,這張桌子上有很多平行線 如下圖所示 兩條相鄰平行線之間的距離是1,硬幣的半徑是r,然後我們來拋硬幣到桌子上,拋下之後硬幣有時候會和一些直線相交 相切的情況也算是相交 有時候不會。請你來計算一下拋一次硬幣之後,該硬幣和直線相交數目的期望。...