Wiki_ki

导航

POJ 2172 & 1380 做一送一什么的最有爱了~~~

  这两题问题抽象后都是判断将一个长宽A,B的矩形能否放入长宽C,D的矩形中。这是个纯粹的数学题目,示意图如下:

  突然发现图弄大了,算了不管了,以上的所有量都可以依次计算得到,当然事先判断A<D时输出NO,然后只要B*cosa+A*sina<=E,那么就输出YES,否则输出NO即可。

  代码如下:

#include <iostream>
#include <cmath>

using namespace std;

double A , B , C , D , E;
double a , b , c;

inline void swap(double &x , double &y) {
    double z = x; x = y; y = z;
}

void    init() {
    cin >> A >> B >> C >> D >> E;
    if (D > E) swap(D,E);
    if (A > B) swap(A,B);
    if (A > C) swap(A,C);
    if (B > C) swap(B,C);
}

bool    check() {
    double l1 , l2;
    if (A <= D && B <= E) return true;
    if (D < A) return false;
    C = sqrt(A*A+B*B);
    a = asin(D/C);
    b = asin(A/C);
    c = acos(cos(a)*cos(b) + sin(a)*sin(b));
    l1 = B*cos(c);
    l2 = A*sin(c);
    if (l1+l2 <= E) return true;
    return false;
}

int main () {
    init();
    if (check()) cout << "YES" << endl;
        else cout << "NO" << endl;
    return 0;
}

  但是我不明白为什么这样的程序居然不是0MS,当然我是用的流输入输出,还用了比较多的过程函数,但是按理0MS应该无压力的啊。

  测试结果如下:

posted on 2012-08-03 20:09  Wiki_ki  阅读(158)  评论(0编辑  收藏  举报