2018ACM上海大都会赛 F Color it【基础的扫描线】
题目:戳这里
题意:有n*m个点全为白色,q个圆,将q个圆内所有的点都染成黑色,问最后剩下多少白色的点。
解题思路:每一行当做一个扫描线,扫描所有的圆,记录每一行在圆中的点即可,O(n*q)。
附ac代码:
1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <algorithm>
5 #include <string>
6 #include <cmath>
7 using namespace std;
8 const int maxn = 2e5 + 10;
9 struct nod
10 {
11 int x;
12 int y;
13 int r;
14 nod(){}
15 bool operator < (const nod & b) const
16 {
17 if(x == b.x) return y < b.y;
18 return x < b.x;
19 }
20 }nu[maxn],a[maxn];
21 int main()
22 {
23 int t;
24 int n, m, q;
25 scanf("%d", &t);
26 while(t--)
27 {
28 int ans = 0;
29 scanf("%d %d %d", &n, &m, &q);
30 for(int i = 1; i <= q; ++i)
31 {
32 scanf("%d %d %d", &a[i].x, &a[i].y, &a[i].r);
33 }
34 int len = 0;
35 for(int i = 0; i < n; ++i)
36 {
37 len = 0;
38 for(int j = 1; j <= q; ++j)
39 {
40 int u = a[j].r * a[j].r - (a[j].x - i) * (a[j].x - i);
41 if(u < 0) continue;
42 u = sqrt(u);
43 //printf("%d u\n", u);
44 nu[++len].x = max(a[j].y - u, 0);
45 nu[len].y = min(a[j].y + u, m - 1);
46 //printf("%d len %d %d\n", len, nu[len].x, nu[len].y);
47 }
48 if(len == 0) continue;
49 sort(nu + 1, nu + 1 + len);
50 int lt = nu[1].x, rt = nu[1].y;
51 for(int j = 2; j <= len; ++j)
52 {
53 if(nu[j].y < 0) continue;
54 if(nu[j].x >= m) break;
55 if(rt >= nu[j].x)
56 {
57 rt = max(rt,nu[j].y);
58 }
59 else
60 {
61 ans += rt - lt + 1;
62 //printf("%d i %d %d lt %d rt\n", i, ans, lt, rt);
63 lt = nu[j].x;
64 rt = nu[j].y;
65 }
66 }
67 ans += rt - lt + 1;
68 //printf("%d i %d %d lt %d rt\n", i, ans, lt, rt);
69 }
70 printf("%d\n", n * m - ans);
71 }
72 return 0;
73 }
2018ACM上海大都会赛 F Color it【基础的扫描线】的更多相关文章
- 【数位dp】Beautiful Numbers @2018acm上海大都会赛J
目录 Beautiful Numbers PROBLEM 题目描述 输入描述: 输出描述: 输入 输出 MEANING SOLUTION CODE Beautiful Numbers PROBLEM ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it
链接:https://www.nowcoder.com/acm/contest/163/F 来源:牛客网 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it 时间限制:C ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it (扫描线)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it (扫描线) 链接:https://ac.nowcoder.com/acm/contest/163/F来源:牛客网 时间 ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛
传送门:2018 ACM 国际大学生程序设计竞赛上海大都会赛 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛2018-08-05 12:00:00 至 2018-08-05 17:00:0 ...
- 2018 ACMICPC上海大都会赛重现赛 H - A Simple Problem with Integers (线段树,循环节)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 H - A Simple Problem with Integers (线段树,循环节) 链接:https://ac.nowcoder.co ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP) 链接:https://ac.nowcoder.com/acm/contest/163/ ...
- 2018 ICPC上海大都会赛重现赛 D Thinking-Bear magic (几何)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 D Thinking-Bear magic (几何) 链接:https://ac.nowcoder.com/acm/contest/163/ ...
- 牛客 Fruit Ninja 2018 ACM 上海大都会赛 (随机化算法)
题目链接:Fruit Ninja 比赛链接:2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 题目描述 Fruit Ninja is a juicy action game enjoyed ...
- [2019上海网络赛F题]Rhyme scheme
题目链接 题意,求出合法的长度为n的字典序第k小字符串,合法的定义为除了最后一位,每一位的取值范围为'A'到'A'+pos-1,而最后一位的取值范围'A'到当前字符串最大值+1. 队友tql,Orz ...
随机推荐
- bootstrap 后端模板
Twitter Bootstrap 框架已经广为人知,用于加快网站,应用程序或主题的界面开发,并被公认为是迄今对于 Web 开发的最有实质性帮助的工具之一.在此之前的,各种各样的界面库伴随着高昂的维护 ...
- 人工智能"眼睛"——摄像头
摄像头机器视觉人工智能的"眼睛",其重要性在嵌入式领域不言而喻.但是如何理解和使用摄像头却是一个非常棘手的问题.本文主要针对调试摄像头过程中遇到的问题,对摄像头的基本原理及概述进行 ...
- 【pytest】(十二)参数化测试用例中的setup和teardown要怎么写?
还是一篇关于pytest的fixture在实际使用场景的分享. fixture我用来最多的就是写setup跟teardown了,那么现在有一个用例是测试一个列表接口,参数化了不同的状态值传参,来进行测 ...
- 容器调度 • Docker网络 • 持续交付 • 动态运行应用程序 部署的多元化
<英雄联盟>在线服务运维之道 - InfoQ https://www.infoq.cn/article/running-online-services-riot/ 第一章 简 介 我是Jo ...
- Vue中双向数据绑定是如何实现的?
vue 双向数据绑定是通过 数据劫持 结合 发布订阅模式的方式来实现的, 也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之发生改变:核心:关于VUE双向数据绑定,其核心是 Ob ...
- centos7-docker的安装过程
一.卸载旧版本以及依赖(第一次安装忽略) sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ ...
- Python学习【第7篇】:字符串拼接
1.格式化字符有%s,%d,%f浮点数 %s代表格式化字符串,s是string意思 msg = 'my name is %s'%"xiaoxing"print(msg)运行结果:m ...
- Python学习【第2篇】:基本数据类型
基本数据类型 字符串 ---------n1 = "xiaoxing" n2 = "admin" n3 = "123" n4 = & ...
- Java中Socket的用法
Socket分为ServerSocket和Socket两大类: 其中ServerSocket用于服务器端,可以通过accept方法监听请求,监听到请求后返回Socket: Socket用户具体完成数据 ...
- 调用个别f5 负载端口为80的vs时,返回值为空的问题
现状: vs负载端口为80并添加XFF,pool包含2个member,member的monitor端口为80&9000. 故障现象: 应用同事描述说再完全复制了一个member并添加到pool ...