LA 2402 (枚举) Fishnet
题意:
正方形四个边界上分别有n个点,将其划分为(n+1)2个四边形,求四边形面积的最大值。
分析:
因为n的规模很小,所以可以二重循环枚举求最大值。
求直线(a, 0) (b, 0) 和直线(0, c) (0, d)的交点,我是二元方程组求解得来的,然后再用叉积求面积即可。
1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <algorithm> 5 6 const int maxn = 30 + 10; 7 struct HEHE 8 { 9 double a, b, c, d; 10 }hehe[maxn]; 11 12 struct Point 13 { 14 double x, y; 15 Point(double x=0, double y=0):x(x), y(y) {} 16 }; 17 typedef Point Vector; 18 19 Vector operator - (const Vector& A, const Vector& B) 20 { return Vector(A.x - B.x, A.y - B.y); } 21 22 double Cross(const Vector& A, const Vector& B) 23 { return (A.x*B.y - A.y*B.x); } 24 25 Point GetIntersection(const double& a, const double& b, const double& c, const double& d) 26 { 27 double x = (a+(b-a)*c) / (1-(b-a)*(d-c)); 28 double y = (d-c)*x+c; 29 return Point(x, y); 30 } 31 32 int main(void) 33 { 34 //freopen("2402in.txt", "r", stdin); 35 36 int n; 37 while(scanf("%d", &n) == 1 && n) 38 { 39 memset(hehe, 0, sizeof(hehe)); 40 for(int i = 1; i <= n; ++i) scanf("%lf", &hehe[i].a); 41 for(int i = 1; i <= n; ++i) scanf("%lf", &hehe[i].b); 42 for(int i = 1; i <= n; ++i) scanf("%lf", &hehe[i].c); 43 for(int i = 1; i <= n; ++i) scanf("%lf", &hehe[i].d); 44 hehe[n+1].a = hehe[n+1].b = hehe[n+1].c = hehe[n+1].d = 1.0; 45 46 double ans = 0.0; 47 for(int i = 0; i <= n; ++i) 48 for(int j = 0; j <= n; ++j) 49 { 50 Point A, B, C, D; 51 A = GetIntersection(hehe[i].a, hehe[i].b, hehe[j].c, hehe[j].d); 52 B = GetIntersection(hehe[i+1].a, hehe[i+1].b, hehe[j].c, hehe[j].d); 53 C = GetIntersection(hehe[i+1].a, hehe[i+1].b, hehe[j+1].c, hehe[j+1].d); 54 D = GetIntersection(hehe[i].a, hehe[i].b, hehe[j+1].c, hehe[j+1].d); 55 double temp = 0.0; 56 temp += Cross(B-A, C-A) / 2; 57 temp += Cross(C-A, D-A) / 2; 58 ans = std::max(ans, temp); 59 } 60 61 printf("%.6f\n", ans); 62 } 63 64 return 0; 65 }
代码君
转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/4148827.html
LA 2402 (枚举) Fishnet相关推荐
- LA 5717枚举+最小生成树回路性质
1 /*LA 5717 2 <训练指南>P343 3 最小生成树的回路性质 4 在生成的最小生成树上,新增一条边e(u,v) 5 若原图上u到v的路径的最大边大于e,则删除此边,加上e,否 ...
- UVa LA 4253 UVa 1421 Archery 枚举,状态削减,oj错误题目 难度: 1
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- Nim游戏的一个扩展——51nod 1661 黑板上的游戏+LA 5059 Playing With Stones
前几天做过一道题目,是Nim游戏的一个扩展,也不能说扩展吧,只是说另一种常见的状态. 问题引入: 给定n堆石子,每堆石子有vi(1<=vi<=1e5) 个,每次可以取一堆中的一些石子,使得 ...
- 枚举项的数量限制在64个以内
为了更好的使用枚举,Java提供了两个枚举集合:EnumSet和EnumMap,这两个集合的使用方法都比较简单,EnumSet表示其元素必须是某一枚举的枚举项,EnumMap表示Key值必须是某一枚举 ...
- [改善Java代码]枚举项的数量限制在64个以内
为了更好的使用枚举,Java提供了两个枚举集合:EnumSet和EnumMap,这两个集合的使用方法都比较简单,EnumSet表示其元素必须是某一枚举的枚举项,EnumMap表示Key值必须是某一枚举 ...
- AcWing 2058. 笨拙的手指(暴力枚举)
题目链接 https://www.acwing.com/problem/content/2060/ 思路 因为二进制和三进制有一位是错误的,那么我们直接二重循环枚举每一位,看更改后是否满足相等,如果是 ...
- Brownie Slicing(二分枚举答案)
描述 Bessie has baked a rectangular brownie that can be thought of as an RxC grid (1 <= R <= 500 ...
- 2018-5-21关于c里枚举 没意思,不好玩 还有UB系列
/*我怀疑我学的是假枚举,对于枚举唯一感觉就是 enum sm { sm1,sm2,sm3}这样子的.在我眼里这个东西好像并没有什么用属于和共用体union一样的东西,边看别人博客边写代码边实验的我帮 ...
- 【CS学习笔记】16、用户枚举三个关键步骤
0x00 前言 用户枚举的三个关键步骤: 1.当前账号是否为管理员账号? 2.哪些账号是域管理员账号? 3.哪个账号是这个系统上的本地管理员账号? 0x01 管理员账号 第一个关键步骤,发现管理员账号 ...
最新文章
- grub安装的 三种安装方式
- Android和ios速度,不拼硬件拼体验 Android和iOS系统的加载速度测验
- OpenCV-图像锐化
- c 程序设计语言试卷,C语言程序设计试题及答案
- cnode社区vue和react渲染
- 制作名片设计需要哪些要素
- 刻在我心底的名字吉他谱-凡凡吉他教室编制
- linux给cpu加压命令,Linux中cpupower命令起什么作用呢?
- 纯java编写的联机五子棋项目(附带开源链接)
- Android11 Launcher添加网格布局设置(3x3,4x4,5x5)
- 5G路由器智慧灯杆无线联网解决方案
- centos6/7 vault源使用
- 2008年国家公务员面试2月27号真题
- 163888一个普通程序员写给COO李大学的一封Mail(不是转载)
- 条件判断语句 if case
- 前端检测图片加载失败,替换图片
- 审稿意见应该怎么写?这份审稿指南告诉你
- 如何精准化的做微信公众号运营?
- ubuntu桌面版下配置锐捷客户端
- 短视频下半场,随刻怎样跑赢?