问一个长方形和一个圆有没有接触。。。。
对每一维独立考虑,每一维都取最接近的值就行了。。。。
#include <iostream> #include <queue> #include <stack> #include <map> #include <set> #include <bitset> #include <cstdio> #include <algorithm> #include <cstring> #include <climits> #include <cstdlib> #include <cmath> #include <time.h> #define maxn 55 #define maxm 4005 #define eps 1e-7 #define mod 1000000007 #define INF 0x3f3f3f3f #define PI (acos(-1.0)) #define lowbit(x) (x&(-x)) #define mp make_pair #define ls o<<1 #define rs o<<1 | 1 #define lson o<<1, L, mid #define rson o<<1 | 1, mid+1, R #define pii pair<int, int> #pragma comment(linker, "/STACK:16777216") typedef long long LL; typedef unsigned long long ULL; //typedef int LL; using namespace std; LL qpow(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base;base=base*base;b/=2;}return res;} LL powmod(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base%mod;base=base*base%mod;b/=2;}return res;} // head void work() { int x, y, z, xx, yy, zz, r; int maxx, minx; int maxy, miny; int maxz, minz; scanf("%d%d%d", &x, &y, &z); maxx = minx = x; maxy = miny = y; maxz = minz = z; for(int i = 1; i < 8; i++) { scanf("%d%d%d", &x, &y, &z); maxx = max(maxx, x); maxy = max(maxy, y); maxz = max(maxz, z); minx = min(minx, x); miny = min(miny, y); minz = min(minz, z); } scanf("%d%d%d%d", &xx, &yy, &zz, &r); x = xx, y = yy, z = zz; if(x > maxx) x = maxx; if(x < minx) x = minx; if(y > maxy) y = maxy; if(y < miny) y = miny; if(z > maxz) z = maxz; if(z < minz) z = minz; LL dis = (LL)(x - xx) * (x - xx) + (LL)(y - yy) * (y - yy) + (LL)(z - zz) * (z - zz); if(dis <= (LL)r * r) printf("Yes\n"); else printf("No\n"); } int main() { int _; while(scanf("%d", &_)!=EOF) while(_--) work(); return 0; }