持续更新中
B:URAL 1874 三分搜索
【题意】:
给出两条边a,b以及一个墙角,求由这两条边和墙角所构成的四边形的最大面积。
【知识点】:
三分搜索
【题解】:
将四边形分为两个三角形,其中一个由a,b,以及第三条同时作为墙角斜边的边c,另一个三角形即为墙角与边c构成
则墙角所在的三角形的最大面积为c*c/4,abc变所在的三角形的面积可用海伦公式求出,然后主要是用三分来求这个c,得到c后就可以得到最佳答案了。
还有一种现成的结论。。。
【代码1】:
1 #include <map> 2 #include <set> 3 #include <cmath> 4 #include <ctime> 5 #include <queue> 6 #include <stack> 7 #include <cstdio> 8 #include <iomanip> 9 #include <string> 10 #include <vector> 11 #include <cstring> 12 #include <sstream> 13 #include <iostream> 14 #include <fstream> 15 #include <algorithm> 16 #include <bitset> 17 #include <climits> 18 #include <ostream> 19 #include <ios> 20 #include <cstdlib> 21 using namespace std; 22 23 #define wh while 24 #define inf (int)(~0u/2) 25 #define FOR(i, n) for(int i = 0; i < n; i++) 26 #define FOR1(i, n) for(int i = 1; i < n; i++) 27 #define FOR2(i, n) for(int i = 0; i <= n; i++) 28 #define REP(i,n) for(int i = 1; i <= n; i++) 29 #define FORI(it,n) for(typeof(n.begin()) it = n.begin(); it != n.end(); it++) 30 #define sf scanf 31 #define pf printf 32 #define frs first 33 #define sec second 34 #define psh push_back 35 #define mkp make_pair 36 #define PB(x) push_back(x) 37 #define MP(x, y) make_pair(x, y) 38 #define clr(abc,z) memset(abc,z,sizeof(abc)) 39 #define lt(v) v << 1 40 #define rt(v) v << 1 | 1 41 #define mid ((l + r) >> 1) 42 #define lson l, mid, v << 1 43 #define rson mid + 1, r, v << 1 | 1 44 45 #define fre freopen("1.txt", "r", stdin) 46 47 typedef long long LL; 48 typedef long double LD; 49 const double eps = 1e-8; 50 51 double area(double x, double y, double z){ 52 double p = (x + y + z) / 2; 53 return (z * z / 4.0 + sqrt(p * (p - x) * (p - y) * (p - z))); 54 } 55 56 int main(){ 57 double x, y; 58 sf("%lf%lf", &x, &y); 59 double l = 0.0, r = x + y; 60 double md; 61 wh(fabs(r - l) > eps){ 62 md = (l + r) / 2; 63 double mdl = (md + l) / 2; 64 double mdr = (md + r) / 2; 65 double v1 = area(x, y, mdl), v2 = area(x, y, mdr); 66 if(v1 > v2) 67 r = (md + r) / 2; 68 else 69 l = (md + l) / 2; 70 } 71 pf("%lf", area(x, y, md)); 72 }
【代码2】:
结论关键代码
1 int main(){ 2 int a, b; 3 sf("%d%d", &a, &b); 4 pf("%lf\n", (a * a + b * b + 2 * sqrt(2) * a * b) / 4.0); 5 return 0; 6 }
UESTC 2014 Summer Training #5 Div.2
时间: 2024-11-11 23:41:26