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---牛客相关推荐

  1. 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 ...

  2. 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 ...

  3. 【2021牛客暑期多校训练营6】H Hopping Rabbit(扫描线)

    H Hopping Rabbit 题意: #include<bits/stdc++.h> using namespace std; const int maxn = 5e5+10;//扫描 ...

  4. 牛客第六场 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 ...

  5. 牛客wannaflay挑战赛22 签到题 计数器 Wolf and Rabbit HDU 1222

    这链接真特么难找 链接:https://www.nowcoder.com/acm/contest/160/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144 ...

  6. 牛客竞赛36签到题A(思维)

    //第一题签到(第一次做牛客的诶) 链接:https://ac.nowcoder.com/acm/contest/328/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C+ ...

  7. 牛客网暑期ACM多校训练营(第二场): H. travel(树形线头DP)

    链接:https://ac.nowcoder.com/acm/contest/140/H 来源:牛客网 题目描述 White Cloud has a tree with n nodes.The roo ...

  8. 牛客网暑期ACM多校训练营(第二场):J. farm(暴力)

    链接:https://www.nowcoder.com/acm/contest/140/J 来源:牛客网 题目描述 White Rabbit has a rectangular farmland of ...

  9. 牛客 20859 兔子的名字

    牛客 20859 兔子的名字 题目链接 题目描述 兔子发现序列的名字都是数字,实在太无聊了,于是兔子开始研究兔子的名字. 现在兔子手上有 n 个名字 Ti 和 m 个可爱词汇Sj,兔子对每一个名字 T ...

  10. 牛客竞赛每日俩题 - 动态规划3

    目录 类01背包问题,选or不选 变种走方格 类01背包问题,选or不选 不同的子序列_牛客题霸_牛客网 问题翻译: S有多少个不同的子串与T相同 S[1:m]中的子串与T[1:n]相同的个数 由S的 ...

最新文章

  1. Android 应用性能优化-StrictMode(严格模式)
  2. DeepLearning tutorial(1)Softmax回归原理简介+代码详解
  3. 微信小程序图表插件 echarts-for-weixin
  4. MyEclipse的Add Libraries对话框
  5. 我的教师生涯2:大学毕业前当上了孩子王
  6. 嵌入式科普:基本概念,设计流程,开发特点,如何学习
  7. 安卓手机浏览器排行_安卓手机双11性价比排行发布|拯救者手机发透明版|小米发大光圈手机镜头...
  8. 使用Spring MVC开发Restful Web服务
  9. 一天一个设计模式之JS实现——建造者模式
  10. html5标签兼容低版本浏览器
  11. 一眼中毒!雷军晒小米9官方高清真机图:全息幻彩惊艳无比
  12. HTML5 原生混合模式,html5 – Chrome中的Chrome css3混合混合模式错误
  13. CSDN 在线峰会——揭晓阿里云核心技术竞争力
  14. 【体系结构】shared pool的个人理解
  15. SQL盲注中的部分常用函数
  16. 来给PPT添加一个进度条和页码吧
  17. 如何设置vs2005的环境变量
  18. Elasticsearch 集成 SpringBoot并进行CRUD操作
  19. Python爬取58同城租房数据,完美解决字体加密
  20. xtuoj1404菱形 II

热门文章

  1. 基于bootstrap的二维码支付系统webAPP设计
  2. 使用cecil 完毕 code injection
  3. 【数学和算法】特征值、特征向量、特征空间,变换矩阵的行列式和特征值
  4. 计算机二级office一星期可以过么,计算机二级Ms office一周过关攻略
  5. QQ自动登陆器-测试版-不更新
  6. 过招多家大厂提炼的iOS面试心经(答案版)
  7. 入门级练习题(1-15)
  8. Android Studio代码统计插件Statistic
  9. python中and的用法
  10. Python实训报告