AtCoder Beginner Contest 353

AtCoder Beginner Contest 353题解

A - Buildings (atcoder.jp)

读题模拟即可

代码:

void solve()
{cin>>n;for(int i=1;i<=n;i++)cin>>a[i];int m=a[1];for(int i=2;i<=n;i++){if(a[i]>m){cout<<i<<endl;return;}}cout<<-1<<endl;
}

B - AtCoder Amusement Park

阅读理解题,如果当前位置不够一个团队那就开走,然后模拟即可

void solve()
{cin>>n>>m;for(int i=1;i<=n;i++)cin>>a[i];int cnt=0,res=0;for(int i=1;i<=n;){if(cnt+a[i]<=m){cnt+=a[i++];}else{// 	cout<<i<<' '<<cnt<<endl;res++;cnt=0;}}res++;cout<<res<<endl;
}

C - Sigma Problem (atcoder.jp)

数学题,先不考虑 m o d 1 0 8 mod10^{8} mod108 我们先观察这个 ∑ i = 1 N − 1 ∑ j = i + 1 N f ( A i , A j ) \displaystyle \sum_{i=1}^{N-1}\sum_{j=i+1}^N f(A_i,A_j) i=1N1j=i+1Nf(Ai,Aj).发现任意的一个元素都会加 n − 1 n-1 n1次也就是说 ∑ i = 1 N − 1 ∑ j = i + 1 N f ( A i , A j ) = ∑ i = 1 n ( n − 1 ) ∗ A i \displaystyle \sum_{i=1}^{N-1}\sum_{j=i+1}^N f(A_i,A_j)=\sum_{i=1}^{n}(n-1)*A_i i=1N1j=i+1Nf(Ai,Aj)=i=1n(n1)Ai然后再看 m o d mod mod操作因为是任意的两个数相加再取 m o d mod mod其中任意一个元素都小于 1 0 8 10^{8} 108两个相加就小于 2 ∗ 1 0 8 2*10^{8} 2108所以可以只要超过了 1 0 8 10^{8} 108 m o d mod mod相当于减去了一个 1 0 8 10^{8} 108,所以这时候我们只要看任意两个数相加有多少个大于 1 0 8 10^{8} 108即可,这时候只需要排个序,然后用双指针维护只要找到满足两个元素相加小于 1 0 8 10^{8} 108的最大区间即可。就能保证时间复杂度在 O ( n ) O(n) O(n)

void solve()
{cin>>n;int s=0;map<int,int>mp;for(int i=1;i<=n;i++)cin>>a[i];sort(a+1,a+1+n);for(int i=1;i<=n;i++){s=s+(a[i]*(n-1));}	int j=n;int cnt=0;for(int i=1;i<=n;i++){while(a[i]+a[j]>=p)j--;cnt+=min(n-j,n-i);}cout<<s-cnt*p<<endl;
}

D - Another Sigma Problem (atcoder.jp)

思维题,我们先观察一下 A = ( A 1 , … , A N ) A = (A_1, \ldots, A_N) A=(A1,,AN) ,先假设数组是$ A_1=3,A_2=14,A_3=123,A_4=1700,A_5=100000,A_6=60,A_7=546,A_8=7954$

∑ i = 1 N − 1 ∑ j = i + 1 N f ( A i , A j ) \displaystyle \sum_{i=1}^{N-1}\sum_{j=i+1}^N f(A_i,A_j) i=1N1j=i+1Nf(Ai,Aj).

假设此时 A j = A 3 A_j=A_3 Aj=A3 那么 f ( A 1 , A 3 ) = A 1 ∗ 1000 + A 3 f ( A 2 , A 3 ) = A 2 ∗ 1000 + A 3 f(A_1,A_3)=A_1*1000+A_3 \space f(A_2,A_3)=A_2*1000+A_3 f(A1,A3)=A11000+A3 f(A2,A3)=A21000+A3

假设此时 A i = A 3 A_i=A_3 Ai=A3那么 f ( A 3 , A 4 ) = A 3 ∗ 10000 + A 4 f ( A 3 , A 5 ) = A 3 ∗ 10000 + A 5 f(A_3,A_4)=A_3*10000+A_4 \space f(A_3,A_5)=A_3*10000+A_5 f(A3,A4)=A310000+A4 f(A3,A5)=A310000+A5

从中我们观察出 A i A_i Ai每次要乘以 1 0 l e n ( a j ) 10^{len(a_j)} 10len(aj)然后将得出的结论进行简化推理

假设 i < j < k i<j<k i<j<k

∑ i = 1 j − 1 ∑ j = i + 1 n f ( A i , A j ) = ∑ i = 1 j − 1 ∑ j = 1 n − 1 A i ∗ 1 0 l e n ( A j ) + A j = ( j − 1 ) ∗ A j + 1 0 l e n ( A j ) ∗ ∑ i = 1 j − 1 A i \displaystyle \sum_{i=1}^{j-1}\sum_{j=i+1}^n f(A_i,A_j)=\sum_{i=1}^{j-1} \sum_{j=1}^{n-1}A_i*10^{len(A_j)}+A_j=(j-1)*A_j+10^{len(A_j)}* \sum_{i=1}^{j-1}A_{i} i=1j1j=i+1nf(Ai,Aj)=i=1j1j=1n1Ai10len(Aj)+Aj=(j1)Aj+10len(Aj)i=1j1Ai

∑ j = 1 n − 1 ∑ k = j + 1 n f ( A j , A k ) = ∑ j = 1 n − 1 ∑ k = j + 1 n A j ∗ l e n ( A k ) + A k = A j ∗ ( ∑ k = j n l e n ( A k ) ) + ∑ k = j n A k \sum_{j=1}^{n-1}\sum_{k=j+1}^n f(A_j,A_k)=\sum_{j=1}^{n-1}\sum_{k=j+1}^nA_j*len(A_k)+A_k=A_j*(\sum_{k=j}^n len(A_{k}))+\sum_{k=j}^n A_{k} j=1n1k=j+1nf(Aj,Ak)=j=1n1k=j+1nAjlen(Ak)+Ak=Aj(k=jnlen(Ak))+k=jnAk

①+②就是答案

换句话说只要做一下对 A i A_i Ai做一下前缀和和后缀和,在对 1 0 l e n ( A j ) 10^{len(A_j)} 10len(Aj)做后缀和即可

int n,m;
int a[N];
int v[N],r[N],l[N],sv[N];
void solve()
{cin>>n;for(int i=1;i<=n;i++)v[i]=1;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++)l[i]=(l[i-1]+a[i])%p;for(int i=n;i>=1;i--)r[i]=(r[i+1]+a[i])%p;for(int i=1;i<=n;i++){string s=to_string(a[i]);int len=s.size();	  int tv=pow(10,len);v[i]=tv%p;}for(int i=n;i>=1;i--)sv[i]=(sv[i+1]+v[i])%p;   int  res=0;for(int i=1;i<=n;i++){// 	  res=(res+v[i]*l[i-1]+a[i]*(n-1))%p;res=(res+a[i]*sv[i+1]+r[i+1])%p;}cout<<res<<endl;
}

E - Yet Another Sigma Problem (atcoder.jp)

用一下字典树然后记录一下每个前缀有多少个字符串 c n t ∗ ( c n t − 1 ) / 2 cnt*(cnt-1)/2 cnt(cnt1)/2加起来即可

int n;
int son[N][26],cnt[N],idx=0;
void insert(string s)
{int p=0;for(int i=0;i<s.size();i++){int u=s[i]-'a';if(!son[p][u])son[p][u]=++idx;cnt[p]++;p=son[p][u];}cnt[p]++;
}
void solve()
{cin>>n;for(int i=1;i<=n;i++){string s;cin>>s;insert(s);}int res=0;for(int i=1;i<=idx;i++){res+=(cnt[i]*(cnt[i]-1)/2);}cout<<res<<endl;
}

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

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

相关文章

关于Docker alpine

1.拉取alpine镜像 docker pull alpine 2.运行镜像成为容器 docker run -it --rm alpine sh (--rm标志确保容器在退出时被自动删除。) 3.容器建立后&#xff0c;运行 docker exec -it <container_id> sh 4.进入容器里的 alpine环境 ①.配置安装源 cat >/etc…

(动画详解)LeetCode面试题 02.04.分割链表

&#x1f496;&#x1f496;&#x1f496;欢迎来到我的博客&#xff0c;我是anmory&#x1f496;&#x1f496;&#x1f496; 又和大家见面了 欢迎来到动画详解LeetCode系列 用通俗易懂的动画的动画使leetcode算法题可视化 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读…

qt 窗体嵌入到任务栏

qwidget嵌入到任务栏 #include <QApplication> #include <QWidget> #include <QDebug> #include <windows.h> #include <QVBoxLayout> // 包含 QVBoxLayout 头文件 #include <QLabel> #include <QLineEdit>int main(int argc, char…

[AutoSar]BSW_Diagnostic_003 ReadDataByIdentifier(0x22)介绍

目录 关键词平台说明背景一、请求格式二、常用DID三、响应格式四、NRC五、case 关键词 嵌入式、C语言、autosar、OS、BSW、UDS、diagnostic 平台说明 项目ValueOSautosar OSautosar厂商vector &#xff0c; EB芯片厂商TI 英飞凌编程语言C&#xff0c;C编译器HighTec (GCC)au…

Linux环境下parted工具使用

在工作中&#xff0c;我们经常会遇到大于分区大于2T的磁盘&#xff0c;由于系统盘最大不能超2T&#xff0c;我们会在做raid时将划分VD来进行装系统&#xff0c;但系统自动安装后无法将磁盘全部识别出来&#xff0c;管理员有时会要求手动对分区进行挂载&#xff0c;这个文档介绍…

保研机试之【二叉树后序】--1道题

参考&#xff1a;东哥带你刷二叉树&#xff08;后序篇&#xff09; | labuladong 的算法笔记 建议先过一遍&#xff1a;今天是二叉树~-CSDN博客&#xff0c;very重要&#xff01; 然后再过一遍&#xff08;理解怎么应用方法&#xff09;&#xff1a;保研机试之[三道二叉树习题…

用python写算法——队列笔记

1.队列定义 队列是一种特殊的线性表&#xff0c;它只允许在表的前端进行删除操作&#xff0c;在表的后端进行插入操作&#xff0c;和栈一样&#xff0c;队列是一种操作受限制的线性表。进行插入操作的端称为队尾&#xff0c;进行删除操作的端称为队头。队列中没有元素时&#…

【初级数据结构】队列

目录 前言队列的概念及结构队列的实现队列的结构队列的初始化队列的销毁入队出队取队头元素取队尾元素判断队列是否为空取出队列中元素个数代码测试 完整代码Queue.hQueue.ctest.c 前言 前面我们已经学习了栈&#xff0c;栈是一种后进先出的结构&#xff0c;即LIFO&#xff0c;…

前端工程化,前端监控,工作流,部署,性能

开发规范 创建项目的时候&#xff0c;配置下 ESlint&#xff0c;stylelint&#xff0c; prettier&#xff0c; commitlint 等; ESLint 主要功能&#xff1a; ESLint 是一个静态代码检查工具&#xff0c;用于在 JavaScript 代码中识别和报告模式。它的目标是提供一个插件化的 …

ImageMagick 的基本概念和使用场景

ImageMagick 是一个开源的、跨平台的图像处理软件套件&#xff0c;可以用于创建、编辑、合成、转换图像等各种图像处理操作。它支持超过200多种图像格式&#xff0c;包括常见的JPEG、PNG、GIF&#xff0c;以及一些不常见的格式。ImageMagick 提供了丰富的命令行工具和编程接口&…

electron进程间通信

Electron 应用程序的结构非常相似。 作为应用开发者&#xff0c;你将控制两种类型的进程&#xff1a;主进程 和 渲染器进程。 这类似于上文所述的 Chrome 的浏览器和渲染器进程。 主进程 每个 Electron 应用都有一个单一的主进程&#xff0c;作为应用程序的入口点。 主进程在 N…

红黑树的理解和简单实现

目录 1. 红黑树的概念和性质 2. 红黑树的插入 2.1. 情况一&#xff1a;新增节点的父亲为空 2.2. 情况二&#xff1a;新增节点的父亲非空且为黑色节点 2.3. 情况三&#xff1a;当父亲为红节点&#xff0c;叔叔存在且为红 2.3.1. 当祖父为根节点的时候 2.3.2. 当祖父不是根…

AttributeError: module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘

问题描述 修改图片大小的时候&#xff0c;代码报错&#xff1a;AttributeError: module PIL.Image has no attribute ANTIALIAS 解决方案 在pillow的10.0.0版本中&#xff0c;ANTIALIAS方法被删除了。 方法1&#xff1a;修改版本&#xff08;不推荐&#xff09; pip instal…

docker 方式 elasticsearch 8.13 简单例子

安装 docker 虚拟机安装 elastic search 安装本地 # 创建 elastic 的网络 docker network create elastic # 用镜像的方式创建并启动容器 docker run -d --name es --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e "xpack.secur…

嵌入式全栈开发学习笔记---C语言笔试复习大全16

目录 指针和数组 用指针来表示数组 用数组来表示指针 笔试题19 上一篇复习了指针使用时的相关注意事项&#xff0c;这一篇我们开始复习指针和数组。 说明&#xff1a;我们学过单片机的一般都是有C语言基础的了&#xff0c;网上关于C语言的资料有很多&#xff0c;大家如果对…

【半夜学习MySQL】数据库中的数据类型(含数值类型、文本二进制类型、时间类型、String类型详谈)

&#x1f3e0;关于专栏&#xff1a;半夜学习MySQL专栏用于记录MySQL数据相关内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 数据类型分类数值类型bit类型tinyint类型int类型float类型decimal类型 文本、二进制类型char类型varchar类型 时间类型Strin…

大模型日报2024-05-12

大模型日报 2024-05-12 大模型资讯 阿里巴巴新AI模型宣称超越OpenAI的GPT-4语言能力 摘要: 周四&#xff0c;阿里巴巴集团旗下的阿里云宣布推出其最新版大型语言模型。该模型声称在语言技能方面超越了OpenAI的GPT-4。阿里巴巴集团有限公司&#xff08;纽交所代码&#xff1a;BA…

1.1. 离散时间鞅-条件期望

1.1. 离散时间鞅-条件期望 条件期望1. 条件期望的定义1.1. 条件期望的定义1.2. 条件期望的存在唯一性 2. 条件期望的示例2.1. X ∈ F X \in \mathcal{F} X∈F&#xff0c; X X X与 F \mathcal{F} F独立的情形2.2. X X X是有限 σ \sigma σ代数情形2.3. X X X是随机变量生成…

无障碍网络(Accessibility)

无障碍网络&#xff0c;有时也被称为Web无障碍&#xff0c;是确保所有人&#xff0c;包括那些有视觉、听力、肢体等障碍的人&#xff0c;都能够顺利、有效地使用网站和在线服务的一种指导原则和一种做法。无障碍网络的重要性无法过分强调。网络应该是公开、开放和无障碍的&…

[Flutter GetX使用] Getx路由和状态管理-GetController使用过程中的踩坑记录

文章目录 问题 - Get.find() 报错!原因总结A:路由和控制器设计a1:项目中的Get路由aa1.项目路由结构aa2.本项目路由的注意点: B: GetController的冷知识C: 总结来看D: 一些参考资料 问题 - Get.find() 报错! 刚接触Getx, 遇到 Get.find()确找不到, 进而报错的问题, 一时间有点没…