题目背景

出于某些原因, 苟先生在追杀富先生。

题目描述

富先生所在的地方是一个\(n\times m\)的网格,苟先生排出了他的狼狗大军,共有\(k\)条狗,第\(i\)条狗所在的位置为\((x_i, y_i)\)。每条狗每个时刻都可以向\(8\)个方向前进一步。

如果一个格子最快的一条狗需要\(t\)时刻才能到,那么这个格子就是\(t\)-危险的,现在给你\(t\),询问有多少个\(t\)-危险的格子。

输入输出格式

输入格式

第一行四个整数\(n,m,k,t\)。
接下来\(k\)行每行两个整数\(x_i,y_i\),没有两条狗在同一个位置。

输出格式

一行一个整数表示答案。

说明

对于\(30\%\)的数据\(n,m\le 1000\);

对于另外\(20\%\)的数据\(k\le 50,n\le 1000\);

对于另外\(20\%\)的数据\(k\le 50\);

对于\(100\%\)的数据\(k\le 2000, n, m\le 1000000000, 0\le t\le n+m\)。


据老与蒟蒻我的区别
我:

现在19:26 感受一下。。

据老:

据老花了据他所说是一个小时(事实上大概不到40分钟

他第一次交数组开小了

正题

题目要求我们求正方形的外层一圈且不可以在其他正方形的边边上,我们可以转化成求两次面积并做差,一次是\(t*2+1\)边长的,一次是\(t*2-1\)边长的,模拟一下是为什么

然后就是扫描线求面积并了

注意到我们由坐标转换成了格子,所以我们把删除线的坐标右移一位

还有一点就是扫描线本身,因为我们把区间放到了点(作为区间的左端点),所以修改时如果是区间\([l,r]\),则线段树进\([l,r-1]\)


Code:

#include <cstdio>
#include <algorithm>
#include <cstring>
#define ll long long
using namespace std;
const ll N=4e3+10;
ll px[N],py[N],n,m,k;
struct node
{ll x,up,dow,k;bool friend operator <(node n1,node n2){return n1.x==n2.x?n1.k<n2.k:n1.x<n2.x;}
}line[N];
ll sum[N<<2],is[N<<2],fy[N],y[N];
#define ls id<<1
#define rs id<<1|1
void updata(ll id,ll l,ll r)
{sum[id]=is[id]?y[r+1]-y[l]:sum[ls]+sum[rs];
}
void change(ll id,ll l,ll r,ll L,ll R,ll delta)
{if(l==L&&r==R){is[id]+=delta;updata(id,l,r);return;}ll Mid=L+R>>1;if(r<=Mid) change(ls,l,r,L,Mid,delta);else if(l>Mid) change(rs,l,r,Mid+1,R,delta);else change(ls,l,Mid,L,Mid,delta),change(rs,Mid+1,r,Mid+1,R,delta);updata(id,L,R);
}
ll matrix_s(ll t)
{memset(sum,0,sizeof(sum)),memset(is,0,sizeof(is));ll cnt=0,ans=0;for(ll i=1;i<=k;i++){y[++cnt]=max(1ll,py[i]-t),y[++cnt]=min(m+1,py[i]+t+1);line[cnt-1]={max(1ll,px[i]-t),y[cnt-1],y[cnt],1};line[cnt]={min(n+1,px[i]+t+1),y[cnt-1],y[cnt],-1};}sort(y+1,y+cnt+1),sort(line+1,line+cnt+1);cnt=unique(y+1,y+cnt+1)-(y+1);for(ll l,r,i=1;i<k<<1;i++){l=lower_bound(y+1,y+1+cnt,line[i].up)-y;r=lower_bound(y+1,y+1+cnt,line[i].dow)-y-1;change(1,l,r,1,cnt,line[i].k);ans+=sum[1]*(line[i+1].x-line[i].x);}return ans;
}
int main()
{ll t;scanf("%lld%lld%lld%lld",&n,&m,&k,&t);for(ll i=1;i<=k;i++) scanf("%lld%lld",px+i,py+i);printf("%lld\n",matrix_s(t)-matrix_s(t-1));return 0;
}

2018.8.31

转载于:https://www.cnblogs.com/butterflydew/p/9567612.html

安徽师大附中%你赛day9 T2 富 解题报告相关推荐

  1. 无聊的活动/缘生意转(2018 Nova OJ新年欢乐赛B题)解题报告

    题目2(下面的太抓 我重新写了个背景 其他都一样) 无聊的活动 JLZ老师不情愿的参加了古风社一年一度的活动,他实在不觉得一群学生跳舞有什么好看,更不明白坐在身后的学生为什么这么兴奋(看小姐姐),于是 ...

  2. XTU新生赛B题 ABK 解题报告

    题目描述 ABK是一个比A+B还要简单的题目,给出两个整数A,B,求出A和B的第K大公约数. 输入 第一行是一个整数N(N ≤ 10000),表示样例的个数. 以后每行一个样例,为3个整数A,B,K ...

  3. 关于安徽赛区推广校赛的实施办法

    关于安徽赛区 推广校赛的实施办法 全国组委会:   安徽赛区作为第一个省级赛区自2010年举办至今,受到安徽省教育厅和安徽各高校高度认可,是安徽省教育厅重点支持的大学生学科和技能竞赛A类赛事.但安徽赛 ...

  4. 中国最新奥数竞赛成绩出炉:南师大附中女生严彬玮满分夺冠!60人国家集训队名单公布...

    雷刚 发自 副中心  量子位 报道 | 公众号 QbitAI 第35届中国数学奥林匹克竞赛成绩公布. 同时也意味着新一届中国奥数国家集训队,正式集结. 60名中学生. 湖北贡献9人.广东7人,上海6人 ...

  5. 2021年兰州师大附中高考成绩查询,2021年兰州重点高中名单及排名,兰州高中高考成绩排名榜...

    "一千个人眼中,就有一千个哈姆雷特".关于兰州高职学校排名,每个人的观点也是各不相同,今天就给大家分享一下我心中的兰州高中排名及格局分布,主要参考依据是近年中考录取分数线及高考成绩 ...

  6. 2021年兰州师大附中高考成绩查询,西北师范大学附属中学2021年排名

    我们想了解的是这个学校的师资怎样,办学这么久以来有获得了什么样的成绩,获得了什么样的荣誉,这个学校是省级示范高中还是市级示范高中,而这个级别的什么样的排名情况,下面我为大家整理了作为省级示范高中学校的 ...

  7. 南师大附中2021高考成绩查询,2021高考倒计时,你有一份师大附中专属回忆录待查收~...

    原标题:2021高考倒计时,你有一份师大附中专属回忆录待查收~ NO.1442 距离2021年高考不到24小时...... 对于大部分人来说,人生中没有任何一场考试比高考更加惊心动魄. 同样地,也没有 ...

  8. 2021高考甘肃师大附中成绩查询,2021甘肃理科高考成绩排名一分一档表,甘肃高考理科成绩排名查询...

    2015甘肃理科高考成绩排名一分一档表甘肃高考理科成绩排名查询 肃省2017年高考文科状元出炉,来自民乐一中的王复英以总分676分摘取理科第一名桂冠.文科状元惠雅婕来自西北师大附中,总分660分.恭喜 ...

  9. 哈师大大二有计算机课,哈师大附中晨风计算机社团

    晨风计算机社团 社团介绍 附中校园论坛于2001年由学生自主编程创办,是哈市第一个由学生建立的校园论坛.论坛由在校学生独立维护并管理,旨在为大家提供一个畅所欲言.交流心声的平台,成为在校生活中亮丽的一 ...

  10. 洛谷 10月 csp-s 模拟赛 T1,T2解析及代码

    洛谷 10月 csp-s 模拟赛 T1,T2解析及代码 T1 Magenta Potion 题目描述 给定一个长为 nnn 的整数序列 aaa,其中所有数的绝对值均大于等于 222.有 qqq 次操作 ...

最新文章

  1. css = display: none, visibility: hidden, opacity: 0 的区别
  2. 基于感知机的手写体识别
  3. 中班音乐计算机反思,中班歌曲《不再麻烦好妈妈》活动反思
  4. C++总结笔记(十)——堆区内存开辟数组和二级指针
  5. vue从url中获取token并加入到 请求头里_BATJ都会用到的接口鉴权cookie、session 和token...
  6. NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示
  7. 提高CIFAR-10分类准确度的方法
  8. 当磁盘工具无法修复磁盘时,你可以这样做!
  9. Winform界面中实现通用工具栏按钮的事件处理
  10. c语言通讯录程序设计个人感言,人生经验 C语言程序设计的感悟
  11. 一名优秀的数据分析师应该具备这10项关键技能
  12. IDEA 顶部导航栏(Main Menu)不见了怎么办?
  13. 微信文章数据分析一(阅读点赞评论)
  14. PS新手教程!手把手教你临摹一枚经典的SIRI拟物图标
  15. python之pip常用命令
  16. TensorFlow学习笔记——(11)循环神经网络
  17. git 查看自己秘钥_git生成和检查秘钥操作
  18. 携手亚马逊云科技帆软,淄博热力开启传统企业数字化转型新征程。
  19. 极速空间笔记本CPU天梯图(笔记本CPU性能排行)——跟小虫学电脑配置
  20. 计算机统考-演示文稿操作题

热门文章

  1. Linux下Esp32micropython开发工具thonny的安装
  2. 近端梯度法(Proximal Gradient Method, PG)
  3. 真烂!史上最烂项目:骗了几百万欧元,苦撑 12 年,600万行代码
  4. 喉炎在临床上的症状表现
  5. 远程控制 - 手机完全控制电脑之TeamViewer
  6. 串口打印调试信息(干货)
  7. 从“半部电台”到“云监工” 天翼云助力红色电信启航新征程
  8. office2016与visio2016冲突的解决方法
  9. java clh_【死磕Java并发】-J.U.C之AQS:CLH同步队列 - Java 技术驿站-Java 技术驿站
  10. VS code连接VMware详解