题意:

在一个 n x n 的平面上,给定 m 个等腰直角三角形(各点均为整数),问该平面上被三角形覆盖奇数次的点有多少个。

思路:

由于 n 较大,不能模拟解决,故使用离散化思想。

考虑每一行有多少点被覆盖了奇数次,题目从二维转换成一维。

对于每一行,考虑每个三角形在此行覆盖的线段,记录下每条线段的左端点 l 、右端点 r 保存在同一个数组中。

排序后则容易知道第一个到第二个数、第三到第四个数...的部分是覆盖奇数次,以此累加结果。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
struct Radar
{
int x, y, w, d;
} radars[105];
int dir[4][2]= {{1, -1}, {1, 1}, {-1, 1}, {-1, -1}}; int main()
{
int n, m, ans=0;
while(cin>>n>>m)
{
ans=0;
for(int i=0; i<m; ++i)
{
cin>>radars[i].x>>radars[i].y>>radars[i].w>>radars[i].d;
/*if(radars[i].d==0) radars[i].y--;
if(radars[i].d==2) radars[i].x--; //uva数据有误,此处处理错误数据
if(radars[i].d==3) radars[i].x--, radars[i].y--;*/
}
for(int i=0; i<n; ++i)
{
int cnt=0, v[202]= {0};
for(int j=0; j<m; ++j)
{
if(radars[j].d<=1 && radars[j].x>i) continue;
if(radars[j].d>1 && radars[j].x<i) continue;
if(abs(radars[j].x-i) >= radars[j].w) continue;
int l=radars[j].y + dir[radars[j].d][1] * (radars[j].w - abs(radars[j].x - i) - 1);
int r=radars[j].y;
if(l>r) swap(l, r);
l--;
l=max(-1, l);
r=min(r, n-1);
v[cnt++]=l, v[cnt++]=r;
}
sort(v, v+cnt);
for(int j=1; j<cnt; j+=2)
ans+=v[j]-v[j-1];
}
cout<<ans<<endl;
}
return 0;
}

uvalive6468,51cthink1419 Strange Antennas (离散化)的更多相关文章

  1. UVALive - 6864 Strange Antennas 扫描线

    题目链接: http://acm.hust.edu.cn/vjudge/problem/87213 Strange Antennas Time Limit: 3000MS 题意 一个雷达能够辐射到的范 ...

  2. 扫描线 - UVALive - 6864 Strange Antennas

    Strange Antennas Problem's Link: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=87213 M ...

  3. Gym 101470 题解

    A:Banks 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt&q ...

  4. codeforces 55D - Beautiful numbers(数位DP+离散化)

    D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standar ...

  5. CodeForces - 55D(数位dp,离散化)

    题目来源:http://codeforces.com/problemset/problem/55/D Volodya is an odd boy and his taste is strange as ...

  6. Codeforces 777E(离散化+dp+树状数组或线段树维护最大值)

    E. Hanoi Factory time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  7. CodeForces - 55D - Beautiful numbers(数位DP,离散化)

    链接: https://vjudge.net/problem/CodeForces-55D 题意: Volodya is an odd boy and his taste is strange as ...

  8. Codeforces #55D (数位dp+离散化)

    Description Volodya is an odd boy and his taste is strange as well. It seems to him that a positive ...

  9. NBUT 1457 莫队算法 离散化

    Sona Time Limit:5000MS     Memory Limit:65535KB     64bit IO Format: Submit Status Practice NBUT 145 ...

随机推荐

  1. JDK8在windows系统下安装

    一.下载 下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html#JDK8 目前大部分公司内部使用的还是jdk ...

  2. k8s&docker面试总结

    花了大半个月对k8s&docker进行了梳理,包括之前读过的书,官方文档以及k&d在公司项目的实践等. 以下是个人对docker & k8s 面试知识点的总结: 1 docke ...

  3. JVM学习(五)对象的引用类型

    一.引言 前面我们学习了JVM的垃圾回收机制,我们知道了垃圾回收是JVM的自发行为:虽然我们可以通过System.gc() 或Runtime.getRuntime().gc()进行显式调用垃圾回收 , ...

  4. 关于数学公式Markdown

    打开写博客(这都打不开就...) 再打开"选项". 选"启用数学公式支持"对(以后有用嘻嘻) 在默认编辑器里有Markdown选对. 然后就可以 \[\sum\ ...

  5. web自动化整理

    HTML学习 https://www.w3school.com.cn/html/html_headings.asp 如何写html呢? 可以选择软件 文本编辑器sublime(http://www.s ...

  6. 超详细的 Vagrant 上手指南

    搭建 Linux 虚拟机,别再用 VirtualBox 从 .iso 文件安装了. 概述 2020 年了,也许你已经习惯了 docker,习惯了在 XX 云上快速创建云主机,但是如果你想在个人电脑上安 ...

  7. Dubbo 成熟度策略.

    url: http://dubbo.apache.org/zh-cn/docs/user/maturity.html Dubbo成熟度策略 Feature Maturity Strength Prob ...

  8. SQLSERVER如何在子查询中使用ORDER BY

    今天在使用公司的一个pager接口的时候,需要传递一个查询的SQL语句,因为我希望他能够在pager对他查询出来的结果排序之前自己先进行排序, 于是在这个SQL中添加了ORDER BY,但是得到的结果 ...

  9. python3 连接数据库~

    ~目前记录的是针对python3写的数据库连接,不适用于pyhon2.python3如果想要与数据库进行连接,则需要先下载对应各数据库的插件包,然后导入包.python3的插件下载地址:https:/ ...

  10. C++ CComboBox控件详解

    转载:http://blog.sina.com.cn/s/blog_46d93f190100m395.html C++ CComboBox控件详解 (2010-09-14 14:03:44) 转载▼ ...