POJ 1408[Fishnet]题解
2017-06-16 08:09
288 查看
题目梗概
给你一个大小为1*1的正方形,正方形的每条边都有n个点,现在用2n条线用类似于下图的方法将这4n个点连接起来,求构成的所有单个小四边形中面积最大的那个的面积。 (传送门)解题思路
这是道平面几何的基础题,首先先将所有的线两两相交并求出所有交点,然后将每个小四边形拆成两个三角形,这要就可以直接用点积来求出小四边形面积,边算边刷max。真的就是道基础题。(真相是感觉再也bb下去了,所以只有这些),各种细节还是看代码比较有效果。#include<cstdio> using namespace std; int n; double ans; struct data { double x,y; data(double x=0,double y=0):x(x),y(y){ } }fn[35][35]; data operator + (const data a,const data b){return data(a.x+b.x,a.y+b.y);} data operator - (const data a,const data b){return data(a.x-b.x,a.y-b.y);} data operator * (const data a,double b){return data(a.x*b,a.y*b);} double cross(const data a,const data b) {return a.x*b.y-a.y*b.x;} double absf(double x) { return (x>0)?x:-x; } data getp(data a,data b,data c,data d) { double t=cross(d,a-c)/cross(b,d); return a+b*t; } double getS(data a,data b,data c,data d) { return (absf(cross(b-c,d-c))+absf(cross(b-a,c-a)))/2; } void _init() { n++; double x; fn[0][0]=data(0.0,0.0); fn[0] =data(1.0,0.0); fn [0]=data(0.0,1.0); fn =data(1.0,1.0); for (int i=1;i<n;i++){scanf("%lf",&x); fn[0][i]=data(x,0.0);} for (int i=1;i<n;i++){scanf("%lf",&x); fn [i]=data(x,1.0);} for (int i=1;i<n;i++){scanf("%lf",&x); fn[i][0]=data(0.0,x);} for (int i=1;i<n;i++){scanf("%lf",&x); fn[i] =data(1.0,x);} for (int i=1;i<n;i++) for (int j=1;j<n;j++) fn[i][j]=getp(fn[i][0],fn[i] -fn[i][0],fn[0][j],fn [j]-fn[0][j]); } void _solve() { ans=0.0; for (int i=0;i<=n;i++) for (int i=0;i<n;i++) for (int j=0;j<n;j++) { double x=getS(fn[i][j],fn[i+1][j],fn[i][j+1],fn[i+1][j+1]); if (ans<x) ans=x; } printf("%0.6lf\n",ans); } int main() { freopen("fishnet.in","r",stdin); freopen("fishnet.out","w",stdout); scanf("%d",&n); while (n) { _init(); _solve(); scanf("%d",&n); } return 0; }
每日一句:
Orz zzkksunboy大佬
相关文章推荐
- Fishnet(POJ_1408)
- POJ 1408 Fishnet【枚举+线段相交+叉积求面积】
- poj 1408 Fishnet
- POJ 1408 Fishnet【枚举+线段相交+叉积求面积】
- POJ-1408 Fishnet 枚举+叉积
- poj 1408 Fishnet(计算几何)
- POJ 1408:Fishnet
- poj 1408 Fishnet
- POJ 1408:Fishnet
- poj 1408 Fishnet(计算几何)
- POJ 1408 Fishnet(几何--叉积求面积 + 求直线的交点坐标)
- poj1408--Fishnet(求多边形面积)
- POJ 1408 Fishnet
- poj_1408 Fishnet(四边形面积)
- Fishnet(暴力POJ 1408)
- 【POJ 1408】 Fishnet (叉积求面积)
- POJ 1408-Fishnet(计算几何-根据交点求多边形面积)
- POJ 1408 Fishnet 两线段交点坐标
- Fishnet(暴力POJ 1408)
- POJ 1408 Fishnet