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应该无压力的啊。
测试结果如下: