题目链接:

http://acm.hust.edu.cn/vjudge/problem/87213

Strange Antennas

Time Limit: 3000MS

题意

一个雷达能够辐射到的范围为等腰三角形,现在给你雷达的坐标,辐射范围和方向,问你求被奇数个雷达辐射到的网格有多少个。

题解

首先,雷达是建在交叉点上的,而考虑覆盖范围是在网格上的,所以需要坐标转换(题目样例第四行有错,应为1,5,4,0)。
其次我们可以考虑每一行都做一遍,然后枚举每个雷达对这一行的影响,没个雷达对这一行的影响就变成了一个区间,这样会变成区间覆盖问题,我们要求的就是覆盖奇数次的区间的长度。这个问题可以用扫描线+离散化来做。(具体看代码)

时间复杂度:O(nmlogm)

代码

#include<map>
#include<cmath>
#include<queue>
#include<vector>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define X first
#define Y second
#define mkp make_pair
#define lson (o<<1)
#define rson ((o<<1)|1)
#define mid (l+(r-l)/2)
#define sz() size()
#define pb(v) push_back(v)
#define all(o) (o).begin(),(o).end()
#define clr(a,v) memset(a,v,sizeof(a))
#define bug(a) cout<<#a<<" = "<<a<<endl
#define rep(i,a,b) for(int i=a;i<(b);i++)typedef long long LL;
typedef vector<int> VI;
typedef pair<int,int> PII;
typedef vector<pair<int,int> > VPII;const int INF=0x3f3f3f3f;
const LL INFL=0x3f3f3f3f3f3f3f3fLL;
const double eps=1e-8;//start----------------------------------------------------------------------const int maxm=111;
const int maxn=30101;int n,m;struct Node {int x,y,p,d;
} nds[maxm];int main() {while(scanf("%d",&n)==1) {scanf("%d",&m);rep(i,0,m) {scanf("%d%d%d%d",&nds[i].x,&nds[i].y,&nds[i].p,&nds[i].d);if(nds[i].d==0) nds[i].y--;else if(nds[i].d==2) nds[i].x--;else if(nds[i].d==3) nds[i].x--,nds[i].y--;}int ans=0;rep(i,0,n) {VPII arr;rep(j,0,m) {int l=INF,r=-1,len;Node& e=nds[j];if(e.d==2) {if(i>e.x-e.p&&i<=e.x) {len=e.p-(e.x-i);l=e.y;r=l+len;}} else if(e.d==3) {if(i>e.x-e.p&&i<=e.x) {len=e.p-(e.x-i);r=e.y+1;l=r-len;}} else if(e.d==0) {if(i<e.x+e.p&&i>=e.x) {len=e.p-(i-e.x);r=e.y+1;l=r-len;}} else if(e.d==1) {if(i<e.x+e.p&&i>=e.x) {len=e.p-(i-e.x);l=e.y;r=l+len;}}l=max(0,l);r=min(r,n);if(l<r){arr.push_back(mkp(l, 1));arr.push_back(mkp(r,-1));}}sort(all(arr));int cnt=0,res=0;rep(j,0,arr.size()) {if(cnt&1){res+=arr[j].X-arr[j-1].X;}cnt+=arr[j].Y;}ans+=res;}printf("%d\n",ans);}return 0;
}//end-----------------------------------------------------------------------

转载于:https://www.cnblogs.com/fenice/p/5759314.html

UVALive - 6864 Strange Antennas 扫描线相关推荐

  1. UVALive 3905 Meteor (扫描线)

    题目链接 https://vjudge.net/problem/UVALive-3905 第一次学到这个.对于每一颗流星,我们求出它在矩形框内待的时间段 L~R,把L和R按照不同的类型加入结构体.我们 ...

  2. DP UVALive 6506 Padovan Sequence

    题目传送门 /*题意:两行数字,相邻列一上一下,或者隔一列两行都可以,从左到右选择数字使和最大DP:状态转移方程:dp[i][j] = max (dp[i][j], dp[1-i][j-1] + a[ ...

  3. 610D - Vika and Segments(线段树+扫描线+离散化)

    扫描线:http://www.cnblogs.com/scau20110726/archive/2013/04/12/3016765.html 看图,图中的数字是横坐标离散后对应的下标,计算时左端点不 ...

  4. 模拟退火 HDU - 2899 Strange Function

    Strange Function [ HDU - 2899 ] 题目大意: 函数 F(x) = 6x7 + 8x6 + 7x3 + 5x2 - yx, 其中x的范围是0 ≤ x ≤ 100. 输入y值 ...

  5. P1502 窗口的星星 离散化+扫描线

    题意: 一个二维平面上有些点有权值. 问给你一个H*W的窗口,问窗口星星亮度总和的最大值. H∗W范围:1e6H*W 范围:1e6H∗W范围:1e6 坐标范围:1e9坐标范围:1e9坐标范围:1e9 ...

  6. 单调栈 or 线段树扫描线 ---- E. Delete a Segment [单调栈+二分] [扫描线处理空白位置的技巧乘2]

    题目链接 题目大意: 给出nnn个线段代表集合,现在问若可以将其中任意一个线段删除,则能够形成最多多少个独立的集合(取并集后) 解题思路1: 首先我们先对线段按照起点排序 那么我们枚举删除的线段iii ...

  7. 线段树 ---- 牛客多校2021多校第6场 H Hopping Rabbit 扫描线

    思维误区:扫描线 扫描线模板里面有两个变量一个是cover和lengthcover和lengthcover和length covercovercover是标记下面是否覆盖满了,但是covercover ...

  8. 树状数组 + 扫描线 ---- BZOJ1818[内部白点][树状数组+扫描线]

    题目链接 中文题目不再赘述 解题思路:很明显所谓把白点变成黑点,就可以看成两个线段的交点,那么求线段交点的个数我们就可以用扫描线,但是现在有一个问题就是可能你任取两点构成的线段线段的端点会重复计算那么 ...

  9. Codeforces Round #672 (Div. 2)D. Rescue Nibel![扫描线解决区间问题]

    题目链接 题目大意:就是给你n个区间,从中选出k个区间,这k个区间共同覆盖了同一个点,问有多少种选法?结果mod 998244353 解题思路:1.首先我们可以这么想:我们把区间左端点赋值为1,右端点 ...

最新文章

  1. minecraft_MineCraft和堆外内存
  2. linux运shell 出现commond vim_有了这个神器,再也不怕shell写得不对了
  3. IDEA——Maven的配置与使用
  4. 【Linux】free命令查询服务器内存信息
  5. 耗费360万美元开发“无坚不摧”的电脑,美国这回下血本了!
  6. 【Kafka】kafka replication factor : 3 larger than avaiable brokers:2
  7. 5个必看的Docker视频
  8. python图片水印_用python来给图片加水印
  9. matlab图片处理基本知识,Matlab图像处理基础知识
  10. 百度地图迁徙大数据_百度地图迁徙大数据:除武汉外多地出行趋势回升
  11. php easyui filebox,easyui fileBox 获取文件名和添加下拉框
  12. java 发微信视频_分享java微信开发视频
  13. 中国大学MOOC-人工智能实践:Tensorflow笔记-课程笔记 Chapter5
  14. Charset API
  15. 哀悼日网页变灰的方法
  16. java刷机教程,小米Mix2s刷机教程
  17. selenium自动获取王者荣耀英雄海报并保存到本地
  18. 影院活动管理系统--项目设计阶段.
  19. 解决无/var/log/messages 问题
  20. 小程序模拟输入车牌号键盘

热门文章

  1. php判断是否为手机设备
  2. maven jetty
  3. 安装Quagga路由软件
  4. 软件项目质量管理经验谈
  5. 字节跳动暑期实习前端面试
  6. python识别发票二维码_python如何实现二维码的生成和识别
  7. 为什么我从Mac切换到Linux
  8. istio_关于Istio的五件事
  9. 2017 开源软件排行_2017年面向设计师和艺术家的顶级开源解决方案
  10. (14)css—伪类选择器