您的位置:首页 > 其它

uva 972 Horizon Line 扫描线

2013-09-25 19:49 239 查看
题意:给你两个脉冲f(x)和g(x),这两个脉冲的最大值形成h(x),求解h(x)中达到的最小值。

//扫描线
#include<iostream>
#include<stdio.h>
#include<string.h>
#define max(a, b) (a>b?a:b)
#define min(a, b) (a>b?b:a)
using namespace std;
int n, m, pt[105], wt[105];
double ans;

struct node
{
double x, y;
}p[105], w[105];

void slove()
{
int i=1, j=1;
while(1)
{
if(pt[i] <= wt[j])//从左向右扫描
{
ans = min(ans, max(p[i].x, w[j].x));
i++;
}
else
{
ans = min(ans, max(p[i].x, w[j].x));
j++;
}
if(i==n || j==m)
break;
}
if(i==n)
{
for( ; j<=m; j++ )//i所在在横坐标用完了,j剩下的数据都与i最后的数据比较
ans = min(ans, max(p[i].x, w[j].x));
}
if(j==m)
{
for( ; i<=n; i++ )//j所在在横坐标用完了,i剩下的数据都与j最后的数据比较
ans = min(ans, max(p[i].x, w[j].x));
}
printf("%.3lf\n", ans);
}

int main()
{
while(~scanf("%d", &n))
{
int i;
ans=101;
memset(pt, 0, sizeof(pt));
memset(wt, 0, sizeof(wt));
for( i=1; i<=n; i++ )//将给的数据转化为点坐标的形式横坐标保存在pt中
{
scanf("%lf%lf", &p[i].x, &p[i].y);
pt[i] = pt[i-1]+p[i].y;
}
scanf("%d", &m);
for( i=1; i<=m; i++ )//将给的数据转化为点坐标的形式横坐标保存在wt中
{
scanf("%lf%lf", &w[i].x, &w[i].y);
wt[i] = wt[i-1]+w[i].y;
}
slove();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: