[转]swust oj 24--Max Area(画图分析)

转载自:http://www.cnblogs.com/hate13/p/4160751.html

Max Area

题目描述:(链接:http://acm.swust.edu.cn/problem/24/)

又是这道题,请不要惊讶,也许你已经见过了,那就请你再来做一遍吧。这可是wolf最骄傲的题目哦。
在笛卡尔坐标系正半轴(x>=0,y>=0)上有n个点,给出了这些点的横坐标和纵坐标,但麻烦的是这些点的坐标没有配对好,你的任务就是将这n个点的横坐标和纵坐标配对好,使得这n个点与x轴围成的面积最大。

输入:

在数据的第一行有一个正整数m,表示有m组测试实例。接下来有m行,每行表示一组测试实例。每行的第一个数n,表示给出了n个点,接着给出了n个x坐标和y坐标。(给出的x轴的数据不会重复,y轴数据也不会重复)(m<5000,1<n<50)
如:
2
4 x1 x2 x3 x4 y1 y2 y3 y4
5 x1 x2 x3 x4 x5 y1 y2 y3 y4 y5

输出:

输出所计算的最大面积,结果保留两位小数,每组数据占一行。

样例:

2
4 0 1 3 5 1 2 3 4
6 14 0 5 4 6 8 1 5 6 2 4 3

15.00
59.00

简单贪心、输入数据应该为double、Wa一次。

思路:画图、整个多边形面积可以划分为n-1个直角梯形的面积之和、将n个x坐标(或y坐标)看做n-1个高,然后面积等于所有(上底+下底)*高/2的和。

这里直接处理不好处理,展开、然后除了两边、中间的每个底需要乘以相邻两个高,故如样例1:

则S=(y1*h1 + y2+(h1+h2) + y3*(h2+h3) + y4*h3)/2,y表示纵坐标,即底,h为高。然后排序贪心即可。

好吧、没说清楚、画下图就知道了。

代码如下:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <cmath>
 6 using namespace std;
 7 #define N  5010
 8
 9 int n;
10 double x[N];
11 double y[N];
12 double h[N];
13
14 void solve()
15 {
16     int i,j;
17     sort(x+1,x+n+1);
18     for(i=1;i<=n;i++)
19     {
20         if(i==1) h[i]=x[i+1]-x[i];
21         else if(i==n) h[i]=x[i]-x[i-1];
22         else h[i]=x[i+1]-x[i-1];
23     }
24     sort(h+1,h+n+1);
25     sort(y+1,y+n+1);
26     double ans=0;
27     for(i=1;i<=n;i++)
28     {
29         ans+=h[i]*y[i];
30     }
31     printf("%.2f\n",ans/2.0);
32 }
33 int main()
34 {
35     int T;
36     scanf("%d",&T);
37     while(T--)
38     {
39         scanf("%d",&n);
40         for(int i=1;i<=n;i++) scanf("%lf",&x[i]);
41         for(int i=1;i<=n;i++) scanf("%lf",&y[i]);
42         solve();
43     }
44     return 0;
45 }

时间: 2024-10-29 10:45:35

[转]swust oj 24--Max Area(画图分析)的相关文章

swust oj 1026--Egg pain&#39;s hzf

题目链接:http://acm.swust.edu.cn/problem/1026/ Time limit(ms): 3000 Memory limit(kb): 65535 hzf is crazy about reading math recently,and he is thinking about a boring problem. Now there are n integers Arranged in a line.For each integer,he wants to know

C语言BFS(5)___TT与魔法师(swust oj 2464)

Description TT生活在一个充满魔法的国度,为了便于管理,国王请魔法师在一些重要的城市之间造出了"彩虹桥"!彩虹桥的特殊之处在于,可以从桥的一头瞬间移动到另一头.国王还请魔法师为彩虹桥设计出了通行证,通行证大致分成A,B,C三种,彩虹桥也对应A,B,C三种,每个彩虹桥可以识别的通行证最多为三种,每个人都拥有一个唯一类型的通行证,拥有通行证的人可以在对应的彩虹桥两头来回穿梭,如拥有A通行证的人只可以穿梭于可识别A通行证的彩虹桥. 一天,TT因为有急事需要从城市1穿梭到城市N,显

背包 [POJ 2184 SWUST OJ 145] Cow Exhibition

Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9479   Accepted: 3653 Description "Fat and docile, big and dumb, they look so stupid, they aren't much  fun..."  - Cows with Guns by Dana Lyons The cows want to prove to

[Swust OJ 404]--最小代价树(动态规划)

题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Description 以下方法称为最小代价的字母树:给定一正整数序列,例如:4,1,2,3,在不改变数的位置的条件下把它们相加,并且用括号来标记每一次加法所得到的和. 例如:((4+1)+ (2+3))=((5)+(5))=10.除去原数不4,1,2,3之外,其余都为中间结果,如5,5,10,将中间结果相加

Max Area of Island——leetcode

Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water. Find the maximum area of an island

Max Area of Island

Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water. Find the maximum area of an island

SWUST OJ Euclid&#39;s Game(0099)

Euclid's Game(0099) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 1855 Accepted: 589 Description Starts with two unequal positive numbers (M,N and M>N) on the board. Two players move in turn. On each move, a player has to write on the boar

swust oj 649--NBA Finals(dp,后台略(hen)坑)

题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two teams, Lakers and Celtics, playing a series of NBA Finals until one of the teams wins n games. Assume that the probability of Lakers winning a game is

线段树 [SWUST OJ 764] 校门外的树 Plus Plus

校门外的树 Plus Plus(0764) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 214 Accepted: 15 Description 西南某科技大学的校门外长度为 L 的公路上有一排树,每两棵相邻的树之间的间隔都是 1 米.我们可以把马路看成一个数轴,马路的一端在数轴 1 的位置,另一端在 L 的位置:数轴上的每个整数点,即 1,2,……,L,都种有一棵树. 现在要将这排树的某一段涂成某种颜色,给定 N 组区间[