1 条题解
-
0
C++ :
#include <stdio.h> #include <math.h> #include <assert.h> #define N 1000 double x[100], y[100], xx, yy, base,scale; int rep,n,i,j,k,T; int main(){ double minx, maxx, miny, maxy, dx, dy, dd, best; int besti; scanf("%d\n",&T); while (T--) { assert (1 == scanf("%d",&n)); for (i=0;i<n;i++) scanf("%lf%lf",&x[i],&y[i]); best = 1000; base = 0; scale=1; for (rep=0;rep<10;rep++) { besti = 0; for (i=0;i<N;i++) { double sininc = sin(base+scale*i*M_PI/2/N); double cosinc = cos(base+scale*i*M_PI/2/N); maxx = maxy = -1e99; minx = miny = 1e99; for (j=0;j<n;j++){ xx = cosinc*x[j] - sininc*y[j]; yy = sininc*x[j] + cosinc*y[j]; //printf("x y xx yy %lg %lg %lg %lg\n",x[j],y[j],xx,yy); if (xx < minx) minx = xx; if (xx > maxx) maxx = xx; if (yy < miny) miny = yy; if (yy > maxy) maxy = yy; } dx = maxx - minx; dy = maxy - miny; dd = dx; if (dy > dd) dd = dy; if (dd < best) { best = dd; besti = i; } //printf("i %d dd %0.5lf\n",i,dd); } base += scale*(besti-1)*M_PI/2/N; scale = scale/N*2; } printf("%0.2lf\n",best*best); } //assert(1 != scanf(" %c",&i)); }
- 1
信息
- ID
- 3639
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者