AtCoder Beginner Contest 366 - VP记录

news/2024/10/30 19:23:04/文章来源:https://www.cnblogs.com/jerrycyx/p/18513862

A - Election 2

高桥日常出镜,kkk 好好学学。

点击查看代码
#include<cstdio>
using namespace std;int main()
{int n,t,a;scanf("%d%d%d",&n,&t,&a);if(t>n-t||a>n-a) printf("Yes\n");else printf("No\n");return 0;
}

B - Vertical Writing

某人被这道题卡了,默哀一秒钟。

内层循环要倒着遍历,小小地坑了我一下。

点击查看代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;const int N=105;
int n;
char str[N][N];int main()
{scanf("%d",&n);int h=0;for(int i=1;i<=n;i++){scanf("%s",str[i]+1);h=max(h,(int)strlen(str[i]+1));}for(int i=1;i<=h;i++){int cnt=0;for(int j=n;j>=1;j--){if(str[j][i]){for(int k=1;k<=cnt;k++)putchar('*');cnt=0;putchar(str[j][i]);}else cnt++;}putchar('\n');}return 0;
}

C - Balls and Bag Query

原来 multisetsize() 返回的是元素个数(重复的算多个)。

模拟就好啦,加减的时候判断是不是少了或多了一种元素。

点击查看代码
#include<cstdio>
#include<set>
using namespace std;const int X=1e6+5;
int q,cnt[X];int main()
{scanf("%d",&q);int ans=0;for(int i=1;i<=q;i++){int op; scanf("%d",&op);if(op==1){int x; scanf("%d",&x);if(!(cnt[x]++)) ans++;}if(op==2){int x; scanf("%d",&x);if(!(--cnt[x])) ans--;}if(op==3){printf("%d\n",ans);}}return 0;
}

D - Cuboid Sum Query

好家伙,三维前缀和(题目名称说的很形象,就是长方体总和)。

没咋推,就跟着容斥原理的加减交替的形式,胡写一通就成了。

点击查看代码
#include<cstdio>
using namespace std;const int N=105;
int n,a[N][N][N],sum[N][N][N],q;int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)for(int k=1;k<=n;k++){scanf("%d",&a[i][j][k]);sum[i][j][k] = a[i][j][k]+sum[i-1][j][k]+sum[i][j-1][k]+sum[i][j][k-1]-sum[i][j-1][k-1]-sum[i-1][j][k-1]-sum[i-1][j-1][k]+sum[i-1][j-1][k-1];}scanf("%d",&q);for(int i=1;i<=q;i++){int x1,y1,z1,x2,y2,z2;scanf("%d%d%d%d%d%d",&x1,&x2,&y1,&y2,&z1,&z2);printf("%d\n",sum[x2][y2][z2]-sum[x1-1][y2][z2]-sum[x2][y1-1][z2]-sum[x2][y2][z1-1]+sum[x2][y1-1][z1-1]+sum[x1-1][y2][z1-1]+sum[x1-1][y1-1][z2]-sum[x1-1][y1-1][z1-1]);}return 0;
}

E - Manhattan Multifocal Ellipse

赛时基本都做这道题来了。

从左往右扫描所有点,每次扫描线向右移动一格,相当扫描线上每个点和左边所有点的距离都增加了 \(1\),和右边所有点的距离都缩短了 \(1\)(曼哈顿距离)。

然后我们只需要找到每次移动以后这根扫描线上总距离小于等于 \(d\) 的点就行了。

赛事乱画的草稿,可以辅助理解一下:

image

就是实现起来有点麻烦。

首先要把所有的坐标都转为正数,这个只需要全部加上一个常数就行了(我这里加的是 \(2\times10^6\),因为坐标系外也可能有合法的点)。

然后处理出对于某横坐标点数的前缀和,用于查找扫描线左右的点数。

接着我们需要知道对于初始位置(我这里是 \(0\))扫描线上每个位置距离所有点的曼哈顿距离和,这个有点小难度。

  • 初始位置扫描线上所有位置横坐标相等,所以直接枚举所有点,横坐标相加即可。

  • 纵坐标之差之和纵坐标有关,所以可以将所有点的纵坐标投影到初始位置扫描线上来。先找某位置与下面所有投影的距离和,具体来说:从下往上遍历所有位置,记录当前位置以下的投影数,在遍历的过程中每上移一格,总距离增加的就是这个点数。随后再找与上面所有投影的距离和,两者相加就可以得到纵坐标距离和。

  • 横坐标距离和加纵坐标距离和就是每个位置距离所有点的曼哈顿距离和。

最后,从左往右推扫描线。因为每次对线上距离的修改都是全局同加同减同查,所以只需要维护它变化的值。又因为全局加减不改变内部大小关系,所以可以事先排序。接着就可以二分查找扫描线上距离加变化之小于等于 \(d\) 的点的数量了,直接用 upper_bound 来查找也行。

#include<cstdio>
#include<algorithm>
using namespace std;const int N=2e5+5,D=2e6;
#define D ((D<<1)+5)
int n,x[N],y[N];
int d,a[D];
int sumcnt[D];
long long ldis[D],rdis[D],dis[D];
int ycnt[D];
#undef Dinline int getsum(int l,int r)
{if(!l) return sumcnt[r];return sumcnt[r]-sumcnt[l-1];
}
int main()
{scanf("%d%d",&n,&d);for(int i=1;i<=n;i++){scanf("%d%d",&x[i],&y[i]);x[i]+=D,y[i]+=D;a[x[i]]=y[i];sumcnt[x[i]]++;}for(int i=0;i<=D<<1;i++)sumcnt[i]+=sumcnt[i-1];long long xdis=0;for(int i=1;i<=n;i++){xdis+=x[i];ycnt[y[i]]++;}long long lytot=0;for(int i=0;i<=D<<1;i++){ldis[i]=(i?ldis[i-1]:0)+lytot;lytot+=ycnt[i];}long long rytot=0;for(int i=D<<1;i>=0;i--){rdis[i]=rdis[i+1]+rytot;rytot+=ycnt[i];}for(int i=0;i<=D<<1;i++){dis[i]=ldis[i]+rdis[i]+xdis;}sort(dis,dis+(D<<1)+1);long long ans=0,delta=0;for(int i=0;i<=D<<1;i++){ans+=upper_bound(dis,dis+(D<<1)+1,d-delta)-dis;delta+=getsum(0,i);delta-=getsum(i+1,D<<1);}printf("%lld\n",ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/823774.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如果想用ECS实现技能系统有什么好的思路

1)如果想用ECS实现技能系统有什么好的思路2)在使用Recast Navigation时遇到的两个问题3)通过摇杆控制角色移动时,怎么获取要移动方向上的坐标4)有判断一个点是否在NavMesh上的接口吗这是第406篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等…

Markmap,用Markdown语法轻松创建思维导图,AI助力提升工作效率

Markmap介绍 首先,什么是 Markmap? Markmap 是一个开源项目,旨在用 Markdown 语法来制作思维导图。 它的目的是:允许你使用简单的 Markdown 语法来快速编写思维导图。 值得一提的是,中文Markmap 在此基础上进一步引入了AI技术,实现了自动生成思维导图的功能。 用户只需输…

单元测试,集成测试,系统测试的区别是什么

单元测试、集成测试、系统测试各有专注的测试层面和目标。单元测试主要聚焦于验证单个组件或者模块的功能正确性、集成测试则是关注不同模块之间接口和交互的准确性、而系统测试涉及对整个完整系统功能和性能的全面评估。在详细描述中,我们可以深入探讨系统测试,它不仅包括功…

数据采集与融合技术作业三

目录作业①实验要求及结果心得体会作业②实验要求及结果心得体会作业③实验要求及结果心得体会码云连接作业① 实验要求及结果要求 要求:指定一个网站,爬取这个网站中的所有的所有图片,例如:中国气象网(http://www.weather.com.cn)。使用scrapy框架分别实现单线程和多线程…

UIAdornerManager实现角标功能

界面设计放入dxUIAdornerManager控件,功能很简单详见主食procedure TForm1.cxButton1Click(Sender: TObject); varaBadge: TdxBadge; // 声明一个变量用于存储徽章对象 begin// 清除当前所有徽章dxUIAdornerManager1.Badges.Clear;// 创建第一个徽章并设置其属性aBadge := dxU…

云服务器和物理服务器有区别吗?

在当今数字化时代,服务器是支撑各类网络应用和服务的关键基础设施。云服务器和物理服务器作为两种常见的服务器类型,它们在多个方面存在着显著的区别。 一、概念 物理服务器是一种独立的、实实在在的硬件设备,具备实体的计算、存储和网络连接等资源,用于运行各种应用程序和…

记一个mysql 主从切换的实验记录

一、前言 msyql 切换主库一般都是用高可用方案,例如MHA,MGR,高可用方案可以自动切主,但是MHA的failover功能无法把旧主自动挂到新主上作为从库使用,所以发生failover后,还需要手动把旧的主库作为备库挂到新的主库上。此时常规操作就是备份新主库,然后应用到旧主库上,然后…

银河麒麟系统V10安装mysql5.7

1、cat /proc/version查看系统版本2、官网(https://dev.mysql.com/downloads/mysql/)下载mysql 3、在服务器直接下载压缩包wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar4、创建upload目录存储压缩包 5、cd /upload/,…

macOS Sonoma 14.7.1 (23H222) Boot ISO 原版可引导镜像下载

macOS Sonoma 14.7.1 (23H222) Boot ISO 原版可引导镜像下载macOS Sonoma 14.7.1 (23H222) Boot ISO 原版可引导镜像下载 2024 年 10 月 28 日,Apple 智能今日登陆 iPhone、iPad 和 Mac。用户现可借助 Apple 智能优化写作,为通知、邮件和消息生成摘要,体验交互更自然、功能更…

macOS Sonoma 14.7.1 (23H222) 正式版发布,ISO、IPSW、PKG 下载

macOS Sonoma 14.7.1 (23H222) 正式版发布,ISO、IPSW、PKG 下载macOS Sonoma 14.7.1 (23H222) 正式版发布,ISO、IPSW、PKG 下载 2024 年 10 月 28 日,Apple 智能今日登陆 iPhone、iPad 和 Mac。用户现可借助 Apple 智能优化写作,为通知、邮件和消息生成摘要,体验交互更自然…

macOS Sequoia 15.1 (24B83) 正式版 ISO、IPSW、PKG 下载

macOS Sequoia 15.1 (24B83) 正式版 ISO、IPSW、PKG 下载macOS Sequoia 15.1 (24B83) 正式版 ISO、IPSW、PKG 下载 iPhone 镜像、Safari 浏览器重大更新和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接:macOS Sequoia 15.1 (24B83) 正式版 ISO、IP…