C.Grab the Seat!

题目链接 https://ac.nowcoder.com/acm/contest/33186/C

题目大意

1.二维平面中,(0,1) - (0,m)为屏幕

2.有n行m列座位(1 <= x <= n, 1 <= y <= m)

3.有k个座位有人,求不被人遮挡屏幕视线的座位数

4.有q次询问,求出每次询问后的答案

解题思路

1.对于y = 1和 y = m的行只会挡住后面的人

2.对于1 < y < m的范围,每个点都会挡住从(0,1)和(0,m)到该点射线所成的区域。如下图分界线构成一个折线图,每一行都对应一个t作为分界点。每一行合法的位置为t - 1

3.对于维护这个折线图,我们可以把(0,1)和(0,m)出发的分开处理。可以发现斜率绝对值大的线一旦出现就会覆盖斜率小的线,所以只需要关注同一行中,x较小的点就行。

4.所以对于每个y,要找到最小的合法x,并取斜率绝对值较大的线段,每次得出该行的线段的答案。把从(0,1)和(0,m)出发的取最小就是答案

代码实现

int a[N], b[N], ans[N], p[N];
int n, m, k, q;
//a坐标 b为y坐标 q为每一行对应x的最小值
void solve() {
fill(p,p + m + 1, n + 1);
for(int i = 1; i <= k; i++) p[b[i]] = min(p[b[i]], a[i]);
for(int i = 1; i <= m; i++) ans[i] = p[i] - 1; // 计算(0,1)出发每一行合法的座位数
int x = INF, y = 1;
for(int i = 2; i <= m; i++) {
int x1 = p[i], y1 = i - 1; if(x != INF) ans[i] = min(ans[i],(x * y1 - 1) / y);
if(y1 * x >= x1 * y) x = x1, y = y1;
} // 计算(0,m)出发每一行合法的座位数
x = INF, y = 1;
for(int i = m - 1; i; i--) {
int x1 = p[i], y1 = m - i; if(x != INF) ans[i] = min(ans[i],(x * y1 - 1) / y);
if(y1 * x >= x1 * y) x = x1, y = y1;
} int res = 0;
for(int i = 1; i <= m; i++) res += ans[i];
cout << res << endl;
}

"蔚来杯"2022牛客暑期多校训练营1 C.Grab the Seat!的更多相关文章

  1. 蔚来杯2022牛客暑期多校训练营5 ABCDFGHK

    比赛链接 A 题解 知识点:图论,dp. 暴力建图,连接所有点的双向通路,除了原点是单向的,并且把路径长度作为权值. 随后,从原点出发(\(f[0] = 0\),其他点负无穷,保证从原点出发),按照权 ...

  2. 蔚来杯2022牛客暑期多校训练营6 ABGJM

    比赛链接 A 题解 知识点:数学,构造. 题目要求构造一个长为 \(m\) 的序列 \(c\) ,\(m\) 自选,使得 \(c\) 的无限循环序列 \(b\) 中任意连续 \(a_i\) 个数中都存 ...

  3. 蔚来杯2022牛客暑期多校训练营7 CFGJ

    比赛链接 C 题解 方法一 知识点:思维. 先统计没有出现的数,每个都可以随便放,所以作为补位用的. 将原数组左移一位作为预定的答案数组,然后开始检查.如果和原数组一样,则用补位数字填充,如果不一样就 ...

  4. "蔚来杯"2022牛客暑期多校训练营9 G Magic Spells【马拉车+哈希】

    四川今天又上热搜了,继南部疫情的未雨绸缪后,龙槽沟是真的倾盆大雨了.我没有兴趣虚伪矫情地对罹难的游人表达同情,因为人与人互不相通徒增谈资:我也没有兴趣居高临下地对擅闯的愚人表达不屑,因为你我皆为乌合之 ...

  5. 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)

    layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...

  6. 2021牛客暑期多校训练营3 J 思维

    传送门 J-Counting Triangles_2021牛客暑期多校训练营3 (nowcoder.com) 题目 Goodeat finds an undirected complete graph ...

  7. B-xor_2019牛客暑期多校训练营(第四场)

    题意 给出n个数组(每组数个数不定),m个询问 l, r, x 序号在区间\([l,r]\)的每个数组是否都可以取出任意个数异或出x 题解 判断一个数组能否异或出x,是简单的线性基问题 判断多个线性基 ...

  8. 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)

    题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9:  对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可.     后者mod=1e9,5才 ...

  9. 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...

  10. 2019牛客暑期多校训练营(第一场) B Integration (数学)

    链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...

随机推荐

  1. mysql索引 数据库优化

    1.mysql索引结构b+树 a.首先要说二叉树,二叉查找树,数的结构不用多说,二叉查找树,大概就是几个原则,左边比右边的小,然后保持一个分布均匀,也就是树的高度尽量最小. b.b-树,b-树和二叉查 ...

  2. phpstorm go py 30天无线试用

    1.关闭软件(建议先导出设置配置,操作会重置配置) 2.删除文件(一般AppData会被隐藏,需要通过查看选项里面打开查看隐藏文件,不懂自行百度) 删除目录 C:\Users\用户名\AppData\ ...

  3. liunx部署flask项目

    如何在linux上部署flask项目 Python3.7 + virtualenv + uwsgi + git + mysql-5.6.45 + nginx 源码编译安装所需要的环境 yum inst ...

  4. 关于pytorch一些基础知识的备份

    压缩conda环境用于备份目的实际上没有意义,因为还有其他方法可以做到这一点,这可能更合适,并使用专为此而设计的内置功能. 您可以创建一个环境.txt版本conda,详细说明其中的每个模块和版本,然后 ...

  5. 【11】python之循环

    Python 中的循环语句有 for 和 while. 1.while 循环 Python 中 while 语句的一般形式: while 判断条件(condition): 执行语句(statement ...

  6. 39.Feign

    Java方式配置 /**局部**/ @FeignClient(value = "user-center", /*修改(user-center)feign的日志级别*/ config ...

  7. 881. 救生艇 (Medium)

    问题描述 881. 救生艇 (Medium) 给定数组 people . people[i] 表示第 i 个人的体重 , 船的数量不限,每艘船可以承载的最大重量为 limit. 每艘船最多可同时载两人 ...

  8. ubuntu的vsftpd

    先输入vsftp -v查看自己的ubuntu是不是已经安装了vsftpd 没有安装的样子 安装的样子 如果没有安装先安装,输入下面的东西 apt-get install vsftpd 进行安装,安装好 ...

  9. Docker之RabbitMQ保姆级别安装

    Docker之RabbitMQ保姆级别安装: 如果觉得样式不好:跳转即可 http://www.lifengying.site/(md文件复制过来有些样式会不一样) 学英语网站项目:自己先保证Redi ...

  10. 创建一个本地CocoaPods库 并在项目中使用该库

    1.新建一个项目如下 2.往TestLib中添加两个文件 3.终端进入TestLib 生成git文件 然后提交到本地 git init git add . git commit -m '添加perso ...