Hopping Rabbit---牛客
H Hopping Rabbit
题意:
草原上(看成二维坐标系)有n个矩形形状的陷阱,一只兔子在草原上蹦来蹦去。如果兔子在(x,y)(x,y),它跳一次后在(x+d,y),(x-d,y),(x,y+d),(x,y-d)四个点中的一个。问在坐标系中是否存在一个点使兔子无论怎么跳都不会掉进陷阱 。
思路:
把整个草原切分成若干块边长为d的正方形,兔子在每一个正方形上只有一个落脚点(这里要分类讨论,一个陷阱被切分成了多少块)。所以可以把所有的陷阱矩形都看做是在坐标轴的[0,d−1]×[0,d−1] 位置上,如果在这其中有一个点没有被陷阱覆盖,在这个点起跳的兔子就不会落进陷阱,否则不存在。之后的处理要用到扫描线(在学了在学了)。参考了很多大佬的代码,理解上还有欠缺。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;struct Scanline {long long l, r;int mark;
};vector<Scanline> G[N];struct SegmentTree {int l, r, sum;long long len;
} t[N << 2];void push_up(int rt) {int l = t[rt].l, r = t[rt].r;if (t[rt].sum) {t[rt].len = r - l + 1;} else {t[rt].len = t[rt << 1].len + t[rt << 1 | 1].len;}
}void build(int rt, int l, int r) {t[rt].l = l, t[rt].r = r;t[rt].len = t[rt].sum = 0;if (l == r) {return ;}int mid = (l + r) >> 1;build(rt << 1, l, mid);build(rt << 1 | 1, mid + 1, r);push_up(rt);
}void update(int rt, int ql, int qr, int c) {int l = t[rt].l, r = t[rt].r;if (ql <= l and qr >= r) {t[rt].sum += c;push_up(rt);return ;}int mid = (l + r) >> 1;if (ql <= mid) {update(rt << 1, ql, qr, c);}if (qr > mid) {update(rt << 1 | 1, ql, qr, c);}push_up(rt);
}int query(int rt, int ql, int qr) {int l = t[rt].l, r = t[rt].r;if (l == r) {return l;}int mid = (l + r) >> 1;if (t[rt << 1].len < mid - l + 1) {return query(rt << 1, ql, qr);} else {return query(rt << 1 | 1, ql, qr);}
}void add(int x1, int y1, int x2, int y2) {G[x1].emplace_back(Scanline {y1, y2, 1});G[x2 + 1].emplace_back(Scanline {y1, y2, -1});
}int main() {int n, d;cin >> n >> d;for (int i = 1; i <= n; i++) {int x1, y1, x2, y2;cin >> x1 >> y1 >> x2 >> y2;x2--, y2--;if (x2 - x1 + 1 >= d) {x1 = 0, x2 = d - 1;}if (y2 - y1 + 1 >= d) {y1 = 0, y2 = d - 1;}x1 = (x1 % d + d) % d;x2 = (x2 % d + d) % d;y1 = (y1 % d + d) % d;y2 = (y2 % d + d) % d;if (x1 <= x2) {if (y1 <= y2) {add(x1, y1, x2, y2);} else {add(x1, 0, x2, y2);add(x1, y1, x2, d - 1);}} else {if (y1 <= y2) {add(0, y1, x2, y2);add(x1, y1, d - 1, y2);} else {add(0, 0, x2, y2);add(x1, y1, d - 1, d - 1);add(0, y1, x2, d - 1);add(x1, 0, d - 1, y2);}}}build(1, 0, d - 1);for (int i = 0; i < d; i++) {for (auto it : G[i]) {int l = it.l, r = it.r, mark = it.mark;update(1, l, r, mark);}if (t[1].len < d) {cout << "YES\n";cout << i << ' ';cout << query(1, 0, d - 1) << '\n';return 0;}}cout << "NO\n";return 0;
}
Hopping Rabbit---牛客相关推荐
- 2021牛客多校6 - Hopping Rabbit(矩形取模+扫描线)
题目链接:点击查看 题目大意:二维平面给出 nnn 个矩形,现在要求找到一个点 (x+0.5,y+0.5)(x+0.5,y+0.5)(x+0.5,y+0.5),满足对于任意的 (x+0.5+k1d,y ...
- 2021牛客暑期多校训练营6 Hopping Rabbit 扫描线 + 矩形 + 细节
传送门 文章目录 题意: 思路: 题意: 给你nnn个矩形,以及一个距离ddd,让你找一个点(x+0.5,y+0.5)(x+0.5,y+0.5)(x+0.5,y+0.5),这个点一次能向四个方向跳dd ...
- 【2021牛客暑期多校训练营6】H Hopping Rabbit(扫描线)
H Hopping Rabbit 题意: #include<bits/stdc++.h> using namespace std; const int maxn = 5e5+10;//扫描 ...
- 牛客第六场 H-Hopping Rabbit
牛客第六场 H-Hopping Rabbit 给出平面上的n个矩形,一只兔子从(x0+0.5,y0+0.5)(x_0+0.5,y_0+0.5)(x0+0.5,y0+0.5)出发,每一次可以平行于x ...
- 牛客wannaflay挑战赛22 签到题 计数器 Wolf and Rabbit HDU 1222
这链接真特么难找 链接:https://www.nowcoder.com/acm/contest/160/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144 ...
- 牛客竞赛36签到题A(思维)
//第一题签到(第一次做牛客的诶) 链接:https://ac.nowcoder.com/acm/contest/328/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C+ ...
- 牛客网暑期ACM多校训练营(第二场): H. travel(树形线头DP)
链接:https://ac.nowcoder.com/acm/contest/140/H 来源:牛客网 题目描述 White Cloud has a tree with n nodes.The roo ...
- 牛客网暑期ACM多校训练营(第二场):J. farm(暴力)
链接:https://www.nowcoder.com/acm/contest/140/J 来源:牛客网 题目描述 White Rabbit has a rectangular farmland of ...
- 牛客 20859 兔子的名字
牛客 20859 兔子的名字 题目链接 题目描述 兔子发现序列的名字都是数字,实在太无聊了,于是兔子开始研究兔子的名字. 现在兔子手上有 n 个名字 Ti 和 m 个可爱词汇Sj,兔子对每一个名字 T ...
- 牛客竞赛每日俩题 - 动态规划3
目录 类01背包问题,选or不选 变种走方格 类01背包问题,选or不选 不同的子序列_牛客题霸_牛客网 问题翻译: S有多少个不同的子串与T相同 S[1:m]中的子串与T[1:n]相同的个数 由S的 ...
最新文章
- Android 应用性能优化-StrictMode(严格模式)
- DeepLearning tutorial(1)Softmax回归原理简介+代码详解
- 微信小程序图表插件 echarts-for-weixin
- MyEclipse的Add Libraries对话框
- 我的教师生涯2:大学毕业前当上了孩子王
- 嵌入式科普:基本概念,设计流程,开发特点,如何学习
- 安卓手机浏览器排行_安卓手机双11性价比排行发布|拯救者手机发透明版|小米发大光圈手机镜头...
- 使用Spring MVC开发Restful Web服务
- 一天一个设计模式之JS实现——建造者模式
- html5标签兼容低版本浏览器
- 一眼中毒!雷军晒小米9官方高清真机图:全息幻彩惊艳无比
- HTML5 原生混合模式,html5 – Chrome中的Chrome css3混合混合模式错误
- CSDN 在线峰会——揭晓阿里云核心技术竞争力
- 【体系结构】shared pool的个人理解
- SQL盲注中的部分常用函数
- 来给PPT添加一个进度条和页码吧
- 如何设置vs2005的环境变量
- Elasticsearch 集成 SpringBoot并进行CRUD操作
- Python爬取58同城租房数据,完美解决字体加密
- xtuoj1404菱形 II