小喵喵的新家

2021-07-14 11:50:29 字數 2921 閱讀 6585

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層和資料層的耦合,在中間增加一...