SPOJ CIRU 圓的面積並 自適應辛普森積分

2021-08-14 01:26:02 字數 1802 閱讀 7223

簡略題意:給出n個圓,求他們的面積並。

去掉內含圓,因為不會對答案造成影響。

去掉和其他圓都相離的圓,這部分答案直接計算。

這樣我們就只用計算和別的圓相交的圓的面積了。

辛普森積分暴力搞吧,對於x = a的直線,看多少圓覆蓋了這條直線,求出這部分的長度即可。

#define poj

#ifdef poj

#include

#include

#include

#include

#include

#include

#include

#include

#include

#endif // poj

#ifdef others

#include

#endif // others

//#define file

#define all(x) x.begin(), x.end()

using

namespace

std;

const

double pi = acos(-1.0);

typedef

long

long ll;

typedef

unsigned

long

long ull;

void umax(int &a, int b)

void umin(int &a, int b)

void file()

namespace solver ;

struct cir

} c[1111];

vector

g, v;

bool tag[1111];

double dis(point a, point b)

bool is_covered(cir a, cir b)

bool is_apart(cir a, cir b)

struct itv

};double f(double x) );}}

sort(all(r));

double pre = -1e20;

for(int i = 0; i < r.size(); i++)

return sum;

}double simpson(double a, double b)

double asr(double a, double b, double eps, double a)

double asr(double a, double b, double eps)

void solve() ;

}sort(c + 1, c + 1 + n);

for(int i = 1; i <= n; i++)

for(int j = i + 1; j <= n; j++)

double ans = 0;

for(int i = 1; i <= n; i++)

if(!tag[i]) g.push_back(c[i]);

memset(tag, 0, sizeof tag);

for(int i = 0; i < g.size(); i++)

for(int i = 0; i < g.size(); i++)

if(tag[i] == 0) v.push_back(g[i]);

printf("%.3f\n", asr(-2000, 2000, 1e-6) + ans);

}};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...