BZOJ 2178 圓的面積並 辛普森積分

2021-09-16 19:55:05 字數 1296 閱讀 5037

題面:

給定n個圓,求其面積並,n<=1000

題目分析:

直接辛普森積分上。。

有乙個優化,預先把被其它圓包含的圓濾去。

(辛普森積分會求很多次一條線上的並,這個優化的效果很明顯,從10000ms+ -> 2500ms)

code:

#include

#include

#include

#define maxn 1005

using

namespace std;

struct point

point

(double x,

double y):x

(x),

y(y)

bool

operator

<

(const point &p)

const

}q[maxn]

;struct circle

}a[maxn]

;const

double eps =

1e-8

, inf =

1e20

, pi =

acos(-

1);int n;

#define sqr(x) (x)*(x)

doublef(

double x)

double l=

-inf,r=

-inf,ret=0;

sort

(q+1

,q+1

+top)

;for

(int i=

1;i<=top;i++)if

(q[i]

.x>r) ret+

=r-l,l=q[i]

.x,r=q[i]

.y;else r=

max(r,q[i]

.y);

return ret+

=r-l;

}double

simpson

(double l,

double m,

double r,

double fl,

double fm,

double fr,

int dep)

inline

double

dist

(circle &a,circle &b)

void

prework()

n=cnt;

}int

main()

bzoj 2178 圓的面積並

給出n個圓,求其面積並 先給乙個數字n n 1000 接下來是n行是圓的圓心,半徑,其絕對值均為小於1000的整數 面積並,保留三位小數 自適應辛普森。留個模板好了 include include include include includeusing namespace std const do...

BZOJ 2178 圓的面積並

description 給出n個圓,求其面積並 題目分析 simpson積分模板題。其實程式有bug,懶得寫了。其實就是不斷的二分,到乙個較小值的時候,就可以了。include include include define f i,j,n for int i j i n i define d i,j...

BZOJ2178 圓的面積並

給出n個圓,求其面積並 先給乙個數字n n 1000 接下來是n行是圓的圓心,半徑,其絕對值均為小於1000的整數 面積並,保留三位小數 直接套 simpson 積分板子就好了,判掉圓包含的情況,然後每次求 f x 的時候直接列舉所有的圓然後掃瞄線暴力搞,因為積分的意義下 f a 的幾何意義就是 x...