背景正常情況下,乙個圓只會多分出來一塊,但是如果乙個圓裡恰有幾個彼此相切的小圓,就會再把這個大圓上下分開。影幾欺哄了眾生了 天以外—— 月兒何曾圓缺 描述
有些東西就如同月光的魔法一般.
luke是愛著vijos的. 他想為自己心愛的東西畫些什麼.
就畫n個圓吧. 把它們的圓心都固定在x軸上.
圓與圓. 為了愛,兩兩不能相交. 為了愛,它們可以互相貼在一起. 內切或外切,都是允許的.
vijos的美麗,在於人心. vijos的孩子們,一定能告訴大家:luke畫的圓究竟把平面分割成了多少塊?
月光恬美地灑在大地上. luke知道,如果什麼都不畫,平面就只有一塊.多美呢! luke知道,只畫乙個圓,平面就分成了兩塊.也很美呢!
但luke還是要多畫一些的,因為他真的深愛著vijos呢. 格式 輸入格式
輸入資料第一行:輸出乙個整數n,1<=n<=300,000.表示圓的個數.
之後n行,每一行有2個整數,x[i]和r[i]表示圓心固定在x[i]的位置,半徑為r[i].
-1,000,000,000<=x[i]<=1,000,000,000 1<=r[i]<=1,000,000,000 所有圓都是唯一的,不會出現重疊. 輸出格式
輸出只有一行,要求輸出平面被分割成了多少塊.
所以可以離散化之後按半徑排序,用線段樹維護目前已經被小圓覆蓋到的區間。對於乙個圓,如果他的直徑已經完全被覆蓋,他對答案的貢獻就是2,否則就是1。然後再用這個圓去覆蓋。
#include
#include
#include
using namespace std;
struct inter
}void up(int p)
}void build(int p,int ll,int rr)
int find(int p,int ll,int rr,int l,int r)
void mark(int p,int ll,int rr,int l,int r)
down(p);
int mid=(ll+rr)/2;
if (r<=mid) mark(lson[p],ll,mid,l,r);
else
}up(p);
}int main()
sort(ord+1,ord+m+1);
m=unique(ord+1,ord+m+1)-ord-1;
for (i=1;i<=n;i++)
sort(a+1,a+n+1);
build(1,1,m-1);
for (i=1;i<=n;i++)
printf("%d\n",ans);
}
vijos1883 月光的魔法《遞迴》
這道題還有另外一種版本叫天神下凡,屬於模擬題,可是模擬題資料太水以至於模擬題a了都不一定在vijos上a。在模擬題裡我用的是一種類似掃瞄線的方式,完美ac,然後在vijos上就是只能過2組 最後經同學提點改為遞迴才a了 這道題我們把圓看成線段,所以這題就是線段覆蓋,然後答案是被完全覆蓋的線段數 所有...
P1883函式題解
這道題是說在 0,1000 中找到乙個值,使得在所有函式中這個值所對應的最大值最小 可能描述的不清楚,詳細看題目 通過畫圖發現,如果將最大值連線起來的話,那麼所有的點將連成乙個類似二次函式的影象,於是我們可以採用三分的方法,如果進行暴力列舉的話會超時,所以使用三分法。為什麼不用二分呢?二分是不能夠判...
洛谷 P1883 函式
給定n個二次函式f1 x f2 x fn x 均形如ax 2 bx c 設f x max,求f x 在區間 0,1000 上的最小值。輸入格式 輸入第一行為正整數t,表示有t 組資料。每組資料第一行乙個正整數n,接著n行,每行3個整數a,b,c 用來表示每個二次函式的3個係數,注意二次函式有可能退化...