贴两个水题的解题报告

和几何相关的东西吧……我都不好意思说是几何……

其实就是水题

HOJ1027

我的做法很囧,旋转小角度然后比判断,精度要求比较高,不知到有什么好的方法没有

HOJ 1027
   
     
1 #include < iostream >
2 #include < cstring >
3 #include < cmath >
4 #include < cstdio >
5 using namespace std;
6
7 const double PI = acos( - 1.0 );
8 const double D = 0.002 ;
9 /*
10 * === FUNCTION ======================================================================
11 * Name: judge
12 * Description:
13 * =====================================================================================
14 */
15 bool
16 judge( double a, double b, double x, double y)
17 {
18 if (a > x && b > y)
19 return true ;
20 else if (a <= x)
21 return false ;
22 for ( double i = 0 ;i <= PI / 2 ;i += D)
23 {
24 double tmpy = (x / 2 * tan(i) + y / 2 ) * cos(i) * 2 ;
25 double tmpx = (y / 2 * tan(i) + x / 2 ) * cos(i) * 2 ;
26 if (tmpy < b && tmpx < a)
27 return true ;
28 }
29 return false ;
30 } /* ----- end of function judge ----- */
31
32 int main()
33 {
34 double a, b, x, y;
35 int cases;
36 scanf ( " %d " , & cases);
37 while (cases -- )
38 {
39 scanf( " %lf%lf%lf%lf " , & a, & b, & x, & y);
40 if (a > b) swap(a, b);
41 if (x > y) swap(x, y);
42 puts(judge(a, b, x, y) ? " Escape is possible. " : " Box cannot be dropped. " );
43 }
44 return 0 ;
45 }

HOJ1032 计算重量分布均匀的多边形的重心

先用第0个点做N - 1个三角形求重心,然后就转移到只有点有重量的离散函数积分,工数上的内容了……

HOJ1032
   
     
1 #include < iostream >
2 #include < cstring >
3 #include < cmath >
4 #include < cstdio >
5 using namespace std;
6 const int N = 1000000 ;
7 const double EPS = 0.001 ;
8 double x[N], y[N];
9 double multiply( double x1, double y1, double x2, double y2)
10 {
11 return x1 * y2 - x2 * y1;
12 }
13 int main()
14 {
15 int cases, n;
16 scanf ( " %d " , & cases);
17 while (cases -- )
18 {
19 scanf( " %d " , & n);
20 double s = 0 , sumsx = 0 , sumsy = 0 ;
21 double ds, dx, dy;
22 for ( int i = 0 ;i < n;i ++ ) scanf( " %lf %lf " , & x[i], & y[i]);
23 for ( int i = 2 ;i < n;i ++ )
24 {
25 double ds = multiply(x[i] - x[ 0 ], y[i] - y[ 0 ], x[i - 1 ] - x[ 0 ], y[i - 1 ] - y[ 0 ]);
26 dx = (x[ 0 ] + x[i - 1 ] + x[i]) / 3 ;
27 dy = (y[ 0 ] + y[i - 1 ] + y[i]) / 3 ;
28 s += ds;
29 sumsx += dx * ds;
30 sumsy += dy * ds;
31 }
32 double ansx = sumsx / s, ansy = sumsy / s;
33 if (fabs(ansx) < EPS)
34 ansx = 0 ;
35 if (fabs(ansy) < EPS)
36 ansy = 0 ;
37 printf( " %0.2lf %0.2lf\n " , ansx, ansy);
38 }
39 return 0 ;
40 }

你可能感兴趣的:(水题)