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,然後我們來拋硬幣到桌子上,拋下之後硬幣有時候會和一些直線相交 相切的情況也算是相交 有時候不會。請你來計算一下拋一次硬幣之後,該硬幣和直線相交數目的期望。...