当前位置: 首页 > news >正文

【题解】Luogu B4185 [中山市赛 2024/科大国创杯小学组 2023] 倍数子串/子串

明明是很容易的题模拟赛却没注意到。

数学、模拟

题意

略。

思路

不妨从 \(5\) 下手。一数仅当最后一位是 \(0\)\(5\) 时,该数才是 \(5\) 的倍数。因此如果第 \(i\) 位是 \(0\)\(5\),所有最后一位是 \(5\) 的连续子串都满足条件,子串数量 \(+i\)

同理,由于 \(100\)\(4\) 的倍数,所以一数只需后两位是 \(4\) 的倍数,该数就是 \(4\) 的倍数。因此如果第 \(i\)\(i-1\) 位构成了 \(4\) 的倍数,则所有以此两位结尾的子串也都满足条件,子串数量 \(+i-1\)。特别地,当第 \(i\) 位或第 \(i-1\) 位是 \(4\)\(8\) 时,这两位也应参与计数。

考虑一个更优化的做法。一个两位数是 \(4\) 的倍数有两种情况:末位为 \(2\)\(6\) 和末位为 \(4\)\(8\)。通过观察不难得出,第一种情况仅十位是奇数时成立,第二种情况仅十位是偶数时成立。这样在代码求解时会更简洁。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#define int long long
using namespace std;
const int N=1e6+10;
int n,ans;
char s[N];
signed main(){scanf("%s",s+1);n=strlen(s+1);for(int i=1;i<=n;i++){if(s[i]=='0'||s[i]=='5') ans+=i;else if(s[i]=='4'||s[i]=='8'){if((s[i-1]-'0')%2) ans+=1;else ans+=i;}else if(s[i]=='2'||s[i]=='6'){if((s[i-1]-'0')%2) ans+=i-1;} }printf("%lld\n",ans);return 0;
}

时间复杂度 \(O(n)\)

http://www.gsyq.cn/news/89186.html

相关文章:

  • 5 分钟快速入门 Github Actions
  • 虚函数虚表
  • 已有析音法
  • 告别排版困境!AI 写作到发布全自动化的完整方案
  • Docker 两大基石:Namespace 和 Cgroups
  • 9、Eclipse集成开发环境:C/C++开发全流程指南
  • Python银行客户数据流失预测SMOTE平衡数据实现神经网络、SVM、决策树、随机森林与超参数调优|附代码数据
  • 享搭提醒助手:数据变动实时预警,运营者业务状态“尽在掌握”
  • 26 avl树(下)
  • openvela——动态管理日志输出通道及其实现原理
  • 连接2026:十款远程控制软件真实力横评与选择指南
  • 可以把 Windows 从 C盘迁移到 SSD 吗?
  • Draco 3D压缩终极指南:如何高效处理大型3D模型文件
  • Overleaf插件定制实战指南:3分钟搞定编辑器功能优化
  • 15、Linux 系统下的邮件与即时通讯使用指南
  • javet 的使用
  • 数据分析工具对比:SPSS vs Tableau vs DataEase
  • 【OTA】自动化测试方案
  • 哪些文件夹里的文件是可以安全删除的?比如Temp、Download这些?
  • SuperDesign:在IDE中唤醒你的设计创造力
  • Stop-motion-OBJ:Blender网格序列动画导入终极指南
  • typescript - 11.高级类型
  • 20、Linux 系统软件更新与安装全攻略
  • JPA多對多關係時 JSON 序列化解决方案
  • 大作业笔记-4
  • iOS评论系统深度解析:构建高性能实时交互体验的完整指南
  • 智能文档处理系统快速上手指南
  • 2025.12.12博客
  • 认证--JSON
  • Path of Exile 2终极物品过滤器配置指南