jzoj3441 小喵喵的新家
description
小喵喵和小聰聰從小就是好朋友 ,他們經常在一起玩耍 。如今小喵已經厭倦了自己居住的環境,想請小聰聰為她建乙個新家。
小喵喵天生多才多藝,對多種樂器頗有研究。對於生活中常見的圖形,她對圓形很感興趣,因此小聰聰決定為她建乙個圓形的新家。
我們設新家在乙個平面直角座標系上,其中新家的圓心為平面直角座標系的原點。
小聰聰有一把神奇的剪刀,他定義了乙個值m,以等分 [−pi,pi]弧度 (詳見樣例)。他還有一支神奇的畫筆,將進行 n次「鋪地毯」操作。對於第i 次「鋪地毯」操作,他將設定乙個半徑ri,起始位置si,終止位置ti ,然後從圓心角pi*si/m到圓心角pi*ti/m這部分區域逆時針鋪上乙個扇形地毯。
小喵喵想到了乙個奇怪的問題,她想知道有多大面積被至少鋪過k次地毯。 這個問題一下就難倒了聰明的小聰聰。 現在小聰聰求助於你,你能幫他解決這個問題嗎?為了方便表達 ,設答案的值為t,你只需要輸出 t×2m/
π 的值即可 。
input
第一行是三個整數 n,m,k,含義 如題目描述中所述。
接下來n行, 每行描述一次鋪地毯操作 。第i行有三個整數r,si,ti,含義 如 題目描述中所述。
output
輸出 乙個整數 表示t×2m/
π 的值。
分析:出題人用心良苦,不卡精度。
實際上算面積的時候很簡單。
本來在題中扇形面積的計算公式是這樣的:s扇
形=所佔
的份數2
mπr2
由於「你只需要輸出 t×2m/π的值即可 」,所以就變成了:s扇
形=所佔
的份數r
2 把整幅圖看作乙個半徑為100000的大圓。
它被分成了2m份,我們乙份乙份求覆蓋不小於k次的面積。
如圖所標,我們紅色的扇形被三條毛毯所穿過,題目說被不少於k條毛毯覆蓋,那我們就從半徑最大的那條毛毯往內數,數夠k條後,你會發現當前那條第k長的半徑所圍起來的地方就是該部分被不少於k條毛毯所覆蓋的地方。
當我們知道一部分中有哪些半徑時,我們通過二分,就能求出答案。
那乙個部分中有什麼半徑,我們怎麼知道呢?
我們把圓拆成一條線段,端點就是圓圈上的各個等分點。把地毯的半徑視為高,連線起始點和終點,如果有橫跨線段中點的,把它看作兩個部分。然後把起點和終點分別存出來,附帶半徑長,按照端點排序(邊集陣列會更快)。
樣例如下圖:
設g[r]表示現在半徑為r的半徑有多少條。
我們可以從-m掃過去,碰到起始點的時候就把其對應的g[r]+1,碰到結束點的時候就把其對應的g[r]-1。記得用線段樹維護1-100000內g[r]的和。
之後利用線段樹的基本性質二分:
現在有l,r,k1。
mid=(l+r)/2;
我們要在l,r中找乙個最大的a,使得∑r
i=ag
[i] =k1。如果∑
ri=m
id+1
g[i]
>=k1,則說明a一定在mid+1—r中,遞迴(mid+1,r,k1)。否則,a要麼在l—mid中,要麼不存在,遞迴(l,mid,k1-∑r
i=mi
d+1g
[i] )。
之所以要減去∑r
i=mi
d+1g
[i] ,是因為我們要使∑r
i=ag
[i] =k1,而∑r
i=mi
d+1g
[i] 是包括在內的,所以遞迴下去也要算,就直接把它減去。
找到a以後,答案加上a2
,注意開long long(int 64)。
code:
#include
#define fo(i,x,y) for(int i=x;i<=y;i++)
using
namespace
std;
int n,m,k,r,s,t,tot,tail,d[500000],x[500000],l[200001],w[200001];;
long
long ans;
int v(int x)
struct ccb[500001];
void change(int x,int y,int i,int a,int c)
int m=(x+y)/2;
if(a<=m) change(x,m,i+i,a,c); else change(m+1,y,i+i+1,a,c);
d[i]=d[i+i]+d[i+i+1];
}int find(int x,int y,int i,int k)
void insert(int x,int y)
int main() else else }}
fo(i,1,tot)
fo(i,-m,m-1)
printf("%lld",ans);
}
JZOJ 3441 小喵喵的新家
小喵喵和小聰聰從小就是好朋友 他們經常在一起玩耍 如今小喵已經厭倦了自己居住的環境,想請小聰聰為她建乙個新家。小喵喵天生多才多藝,對多種樂器頗有研究。對於生活中常見的圖形,她對圓形很感興趣,因此小聰聰決定為她建乙個圓形的新家。我們設新家在乙個平面直角座標系上,其中新家的圓心為平面直角座標系的原點。小...
3281 喵喵的數學難題
3281 喵喵的數學難題 最近,喵喵一直在學習數學。他發現了,任意乙個正整數n,都可以被一素數整除。發現了這個結論的他特別高興。有一天,lls給了喵喵乙個數字n,一本正經地告訴他 你能求所有能整除n!的素數和其相應的數量嗎?喵喵想了想說 直接算不就好了嘛 lls笑了笑說 小老弟你還是太年輕 你能幫助...
喵喵的技術學習之路 一
發現純寫技術蠻無趣枯燥的,也不連貫,就突發奇想,在部落格中加些生活的樂趣。主題呢就是講乙個程式設計師小菜鳥的學習成長,技術部落格都融入到其中。背景如下 地點 平行世界中魔都一家公司,喵喵小菜鳥一枚,大四實習妹紙。蘑菇一神秘男子,人物純屬虛構。蘑菇 簡單來說,為了降低ui層和資料層的耦合,在中間增加一...