[NOI考前歡樂賽] 小奇畫畫 題解
阿新 • • 發佈:2018-07-27
div ace 包括 ios sin () 表示 noi 速度
小奇畫畫
時間限制: 1 Sec 內存限制: 128 MB
題目描述
紅蓮清淚兩行欲吐半點卻無
如初是你杳然若緋霧還在水榭畔畫樓處
是誰衣白衫如初誰紅裳如故
——《憶紅蓮》
小奇想畫幾朵紅蓮,可惜它剛開始學畫畫,只能從畫圓開始。小奇畫了n個圓,它們的圓心都在x軸上,且兩兩不相交(可以相切)。現在小奇想知道,它畫的圓把畫紙分割成了多少塊?(假設畫紙無限大)
輸入
第一行包括1個整數n。
接下來n行,每行兩個整數x,r,表示小奇畫了圓心在(x,0),半徑為r的一個圓。
輸出
輸出一個整數表示答案。
樣例輸入
4
7 5
-9 11
11 9
0 20
樣例輸出
6
提示
對於 100%數據,1<=n<=300000,-10^9<=x<=10^9,1<=r<=10^9。
題解
畫紙一開始為1塊,每個圓被畫下時,一定會將畫紙至少多分割成一塊,如果一個圓和另外兩個圓相切,那麽還會再多分割一塊出來。
由於程序中對map的隨機存儲較多,使用 unordered_map
(HashMap)代替 map
可以大大加快運行速度。
代碼
#include <iostream> #include <unordered_map> #define ll long long using namespace std; int n, ans = 1; ll x, r; unordered_map<ll, bool> ma; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> n; while (n--) { cin >> x >> r; if (ma[x + r] && ma[x - r]) { ans += 2; } else { ans += 1; ma[x + r] = true; ma[x - r] = true; } } cout<< ans; return 0; }
[NOI考前歡樂賽] 小奇畫畫 題解