題目
在100000 * 10000的空地上,有n個時間點,每個時間點會在(xi,yi)上種一棵樹。
定義綠色:被樹包圍的空地的個數。
問每個時間點之後綠色為多少。如圖:
思路
逆向求解,從(0,0)位置將圈外的全標記(給空地加一圈),在分別考慮當前的樹,是在圈內還是圈的外圍。
由於vis是全域性陣列,之後的bfs都非常快,每個點只遍歷過一次。
**實現
1 #include2 #include3 #include4using
namespace
std;
56 typedef pairp;
7const
int maxn = 100000 + 10; //
點的最大個數
8const
int size = 2000 + 10; //
地圖大小
9const
int offset = 1000; //
偏置10
const
int dx = ;
11const
int dy = ;
12int
n,xi[maxn],yi[maxn],ans[maxn];
13bool
vis[size][size], maze[size][size];
1415
int bfs(int x, int
y)1633}
34}35return
ret;36}
3738
intmain()
3947
48 bfs(0, 0
);49
int res = 0;50
for (int i = 0; i < size; i++)
51for (int j = 0; j < size; j++)
52if (vis[i][j] == false) res++;
53 ans[n] =res;
5455
for (int i = n; i >= 4; i--) //
1~3棵以內不可能圍成空地
5666
if (cnt == 0) //
cnt == 0,表示該點在內部
6771
else res -= (bfs(u, v) - 1
);72 ans[i - 1] =res;73}
74for (int i = 1; i <= n; i++)
75 printf("
%d\n
", ans[i]);
76return0;
77 }
xdoj 2018校賽 網路賽
第一次參加校賽,相比於之前的網路賽,感覺這次難度還行,不算難也不算簡單。先簡單說說前面幾道題吧 a 水題,找規律 b 水題,最小公倍數 c 稍稍有點難度,先排序,仔細考慮即可 d 水題,找規律 e bfs打表 f 矩陣快速冪遞推 g 找到一一對應的方法bfs 好了,仔細說說最後三題吧。h 一道看上去...
sdut 3914 校賽 校賽
time limit 1000ms memory limit 65536kb problem description sdut 的校賽是從 2009 年開始的,康納每年看到比賽之後,往往就會喊一聲 ma ji ya ba ku nai 年份的縮寫 比如說 2009 年就會說 ma ji ya ba ...
SDUT 3914 校賽 校賽
time limit 1000ms memory limit 65536kb problem description sdut 的校賽是從 2009 年開始的,康納每年看到比賽之後,往往就會喊一聲 ma ji ya ba ku nai 年份的縮寫 比如說 2009 年就會說 ma ji ya ba ...