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; }
相关文章推荐
- uva972 Horizon Line 扫描线水题
- UVA 972 Horizon Line 离散化
- uva 972 - Horizon Line(平移扫描线)
- UVA 972 Horizon Line
- 【转换模型+扫描线】【UVA1398】Meteor
- UVA - 1606 Amphiphilic Carbon Molecules : 极角扫描法 利用叉积比较极角大小
- UVA - 11572 Unique Snowflakes 滑动扫描
- 【转换模型+扫描线】【UVA1398】Meteor
- Uva1606 Amphiphilic Carbon Molecules【例题8-6】【极角扫描法】【不懂!】
- UVa 1325 Hypertransmission 解题报告(扫描线)
- UVA 1398 Meteor(扫描线)
- UVALive 4221 Walk in the Park 扫描线
- 凸包扫描 + 旋转卡壳 UVALive 4728
- UVALive 3905-Meteor-扫描线算法
- Uva1398--Meteor(扫描线)
- 线段树扫描线uva11983
- uva 11983 Weird Advertisement(扫描线)
- 扫描线 - UVALive - 6864 Strange Antennas
- UVA 10535 - Shooter(扫描+几何+最大重叠区间)
- POJ 1901 | LA 2963 | UVa 1325 - Hypertransmission (思维 扫描)