题意:一个N*M的矩形,每个点初始都是白色的,有Q次操作,每次操作将以(x,y)为圆心,r为半径的区域涂成黑点。求最后剩余白色点数。

分析:对每行,将Q次操作在该行的涂色视作一段区间,那么该行最后的白色点数即列数-区间覆盖的总长度。这就转化成了扫描线的问题。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn =1e4+;
struct Circle{
LL x,y,r;
}p[maxn];
struct Node{
LL l,r;
bool operator <(const Node & p ) const{
if(l==p.l) return r>p.r;
return l<p.l;
}
}; vector<Node> vz; int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int T;scanf("%d",&T);
while(T--){
LL N,M,Q;
scanf("%lld%lld%lld",&N,&M,&Q);
LL ans = N*M;
for(int i =;i<Q;++i) scanf("%lld%lld%lld",&p[i].x,&p[i].y,&p[i].r);
for(int i=;i<N;++i){
vz.clear();
for(int j=;j<Q;++j){
LL delx = abs(i-p[j].x);
if(delx>p[j].r) continue;
LL range = (LL)sqrt(p[j].r*p[j].r-delx*delx);
LL l = max((LL),p[j].y-range);
LL r = min(M-,p[j].y+range);
vz.push_back((Node){l,r});
}
sort(vz.begin(),vz.end());
int sz = vz.size();
LL r = -,tot = ;
for(int j=;j<sz;++j){
if(vz[j].r<=r) continue;
if(vz[j].l>r) r = vz[j].l;
else tot--;
tot += vz[j].r -r +;
r = vz[j].r;
}
ans -=tot;
}
printf("%lld\n",ans);
}
return ;
}

2018 ACM 国际大学生程序设计竞赛上海大都会 F - Color it (扫描线)的更多相关文章

  1. 2018 ACM 国际大学生程序设计竞赛上海大都会部分题解

    题目链接 2018 ACM 国际大学生程序设计竞赛上海大都会 下午午休起床被同学叫去打比赛233 然后已经过了2.5h了 先挑过得多的做了 .... A题 rand x*n 次点,每次judge一个点 ...

  2. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it

    链接:https://www.nowcoder.com/acm/contest/163/F 来源:牛客网 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it 时间限制:C ...

  3. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it (扫描线)

    2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it (扫描线) 链接:https://ac.nowcoder.com/acm/contest/163/F来源:牛客网 时间 ...

  4. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP)

    2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP) 链接:https://ac.nowcoder.com/acm/contest/163/ ...

  5. 2018 ACM 国际大学生程序设计竞赛上海大都会赛

    传送门:2018 ACM 国际大学生程序设计竞赛上海大都会赛 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛2018-08-05 12:00:00 至 2018-08-05 17:00:0 ...

  6. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位dp)

    题目链接:https://ac.nowcoder.com/acm/contest/163/J 题目大意:给定一个数N,求区间[1,N]中满足可以整除它各个数位之和的数的个数.(1 ≤ N ≤ 1012 ...

  7. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 A,D

    A链接:https://www.nowcoder.com/acm/contest/163/A Fruit Ninja is a juicy action game enjoyed by million ...

  8. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛-B-Perfect Numbers(完数)

    题目描述 We consider a positive integer perfect, if and only if it is equal to the sum of its positive d ...

  9. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛-K-Matrix Multiplication(矩阵乘法)

    题目描述 In mathematics, matrix multiplication or matrix product is a binary operation that produces a m ...

随机推荐

  1. Oracle10g RAC 关闭及启动

    情况1: 保养数据库及操作系统,服务器,需要关闭DB(所有实例),OS 及Server . a. 首先停止Oracle10g 环境 $ lsnrctl stop (每个节点上停止监听,也可以用srvc ...

  2. library和libraryTarget使用场景组件开发

    https://segmentfault.com/q/1010000004676608 https://github.com/zhengweikeng/blog/issues/10

  3. mysql数据库sql优化——子查询优化

    1.什么是子查询.表关联查询: 子查询:是指在主sql语句中的select或where子句中使用select查询语句:select a.name,(select b.name from b where ...

  4. DB水平切换要点

    分区健选择 数据应该怎样拆分,依照什么纬度来拆分 节点路由 应用程序写死/客户端(TDDL,cobar-client)/中间层(cobar-server) 固定分配/动态分配/混合 分片数据均衡 某些 ...

  5. [hihoCoder] KMP算法

    Each time we find a match, increase the global counter by 1. For KMP, algorithm, you may refer to th ...

  6. C# Remoting双向通信

    闲来无事想玩玩双向通信,实现类似QQ的互发消息的功能.于是乎开始学习.Net Remoting. .Net Remoting 是由客户端通过Remoting,访问通道以获得服务端对象,再通过代理解析为 ...

  7. 在DO搭建自己的ss

    前期准备: 1.一个paypal账户 2.国外的一台VPS paypal的注册需要一个邮箱和一张信用卡即可. VPS的话经过搜索对比,决定使用DigitalOcean的.(点击此链接注册DO可获得10 ...

  8. hdu 1513 Palindrome【LCS滚动数组】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1513 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  9. Log4j 2

    Log4j – Apache Log4j 2 - Apache Log4j 2 http://logging.apache.org/log4j/2.x/ Apache Log4j 2 Apache L ...

  10. 外观模式(Facade) Adapter及Proxy 设计模式之间的关系 flume

    小结: 1. 外观模式/门面模式 Facade  往是多个类或其它程序单元,通过重新组合各类及程序单元,对外提供统一的接口/界面. Proxy(代理)注重在为Client-Subject提供一个访问的 ...