LA 3905 Meteor / 区间扫描

2024-06-15 12:08
文章标签 扫描 区间 meteor la 3905

本文主要是介绍LA 3905 Meteor / 区间扫描,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

求哪一时刻 框框里的点最多 每个点在做运动(在边框上不算)

求出每个点经过框框的区间 在2维坐标系以x表示 是开区间 因为区间边上不算

假设有一条竖线从左到右扫描过去 也就是求哪一时刻扫描线相交的区间最多

可以设cnt = 0每遇到左区间++右区间--求最大的cnt 然后一个区间右端点与一个区间的左区间相同 要先算右区间因为是开区间

书上的代码

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;const int maxn = 100010;
struct Event
{double x;int type;bool operator < (const Event& a) const{return x < a.x || (x == a.x && type > a.type);}
}event[maxn*2];void update(int x, int a, int w, double& l, double& r)
{if(a == 0){if(x <= 0 || x >= w)r = l - 1;}else if(a > 0)//0 < x+at < w <=> t > -x/a && t < (w-x)/a{l = max(l, -(double)x/a);r = min(r, (double)(w-x)/a);}else if(a < 0)//0 < x+at < w <=> t < -x/a && t > (w-x)/a{l = max(l, (double)(w-x)/a);r = min(r, -(double)x/a);}
}
int main()
{int T;scanf("%d", &T);while(T--){int w, h, n, e = 0;scanf("%d %d %d", &w, &h, &n);for(int i = 0; i < n; i++){int x, y, a, b;scanf("%d %d %d %d", &x, &y, &a, &b);double l = 0, r = 1e9;update(x, a, w, l, r);update(y, b, h, l, r);if(l < r){event[e++]= (Event){l, 0};event[e++]= (Event){r, 1};}}sort(event, event+e);int cnt = 0;int ans = 0;for(int i = 0; i < e; i++){if(event[i].type == 0)cnt++;elsecnt--;ans = max(ans, cnt);}printf("%d\n", ans);}return 0;
}


 

这篇关于LA 3905 Meteor / 区间扫描的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1063407

相关文章

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

hdu4267区间统计

题意:给一些数,有两种操作,一种是在[a,b] 区间内,对(i - a)% k == 0 的加value,另一种操作是询问某个位置的值。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import

hdu4417区间统计

给你一个数列{An},然后有m次查询,每次查询一段区间 [l,r] <= h 的值的个数。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamRead

hdu3333区间统计

题目大意:求一个区间内不重复数字的和,例如1 1 1 3,区间[1,4]的和为4。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;

独立按键单击检测(延时消抖+定时器扫描)

目录 独立按键简介 按键抖动 模块接线 延时消抖 Key.h Key.c 定时器扫描按键代码 Key.h Key.c main.c 思考  MultiButton按键驱动 独立按键简介 ​ 轻触按键相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通与断开。  ​ 按键抖动 由于按键内部使用的是机

【uva】11536-Smallest Sub-Array(区间移动问题)

一个区间移动的问题,1A了,感觉没什么好说的。。 13975926 11536 Smallest Sub-Array Accepted C++ 0.809 2014-08-01 11:00:20 #include<cstdio>#include<cstring>#include<iostream>using namespace std;#define INF 1 << 30

【hdu】Just a Hook(线段树区间修改)

线段树模板题,练的是懒惰标记。 懒惰标记,就是更新一段区间的时候,如果小区间被包含在了所需要更新的区间里面,那么直接对代表这个区间的数组元素赋值,之后做一个标记(表示这个区间的子区间都需要更新)但是不继续递归(这样可以节省很多的时候)。 116571152014-09-15 14:17:26Accepted1698796MS2380K1750 BG++KinderRiven #

【hdu】I Hate It(线段树,结点修改求区间最大值)

线段树的模板题,还是二分递归。 #include <iostream>#include <cstdlib>#include <cstdio>#include <string>#include <cstring>#include <cmath>#include <vector>#include <queue>#include <set>#include <map>#incl

【hdu】敌兵布阵(线段树,更加结点,区间求和)

最近开始刷线段树,主要围绕notonlysuccess的线段树总结刷。 结点修改还是比较简单的,不需要什么懒惰标记,直接二分递归就可以了。 #include <iostream>#include <cstdlib>#include <cstdio>#include <string>#include <cstring>#include <cmath>#include <vecto

三维激光扫描点云配准外业棋盘的布设与棋盘坐标测量

文章目录 一、棋盘标定板准备二、棋盘标定板布设三、棋盘标定板坐标测量 一、棋盘标定板准备 三维激光扫描棋盘是用来校准和校正激光扫描仪的重要工具,主要用于提高扫描精度。棋盘标定板通常具有以下特点: 高对比度图案:通常是黑白相间的棋盘格,便于识别。已知尺寸:每个格子的尺寸是已知的,可以用于计算比例和调整。平面标定:帮助校准相机和激光扫描仪之间的位置关系。 使用方法 扫描棋盘: