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

【前缀和+哈希表】P3131 [USACO16JAN] Subsequences Summing to Sevens S

题目

P3131
在这里插入图片描述

分析&&代码

由于模完7之后的数字只有0~6,所以本题的哈希表可以用一个大小为7的数组优化。

原本我写的代码

#include<iostream>using namespace std;const int N = 5e4 + 10;int n,a[N],f[N],mp[10];int main()
{cin >> n;for(int i=1;i<=n;i++) {cin >> a[i];f[i] = (f[i-1] + a[i]) % 7;if(mp[f[i] % 7] == 0) mp[f[i] % 7] = i; //头一次出现,记录下标 }//枚举结尾int ret = 0; for(int i=1;i<=n;i++){ret = max(ret,i-mp[f[i] % 7]);}cout << ret;
}

错误原因:
在这里插入图片描述
改正:

#include<iostream>
#include<cstring>using namespace std;const int N = 5e4 + 10;int n,a[N],f[N],mp[10];int main()
{cin >> n;memset(mp,-1,sizeof mp);mp[0] = 0;int ret = 0;for(int i=1;i<=n;i++) {cin >> a[i];f[i] = f[i-1] + a[i];if(mp[f[i] % 7] == -1) mp[f[i] % 7] = i; //头一次出现,记录下标 else ret = max(ret,i-mp[f[i] % 7]);}cout << ret;return 0;
}

优化掉前缀和数组,使用一个int变量sum来代替,因为只用记录一次数值即可,后面不会查。

#include <iostream>
#include <cstring>
using namespace std;const int N = 5e4 + 10;int n, a[N], sum, mp[10];int main() 
{cin >> n;memset(mp, -1, sizeof mp);mp[0] = 0;int ret = 0;for (int i = 1; i <= n; i++) {cin >> a[i];sum = (sum + a[i]) % 7;if(mp[sum] == -1) mp[sum] = i;else ret = max(ret,i-mp[sum]);}cout << ret;return 0;
}

使用哈希表的意义就是可以记录下某一个值对应的下标,这样就可以在遍历的过程中用O(1)的时间查找这个值,而不是在遍历的过程中需要查找的时候,还要再来一个for循环把前面的前缀和再遍历一遍看看有没有对应的值。


文章转载自:

http://pqRitPNJ.mcjxq.cn
http://ZrmeuUIf.mcjxq.cn
http://9kcFJHlu.mcjxq.cn
http://khpBFLMU.mcjxq.cn
http://7yiGhvLR.mcjxq.cn
http://pe4IfkOy.mcjxq.cn
http://J5QZ0Gny.mcjxq.cn
http://evKFyUqX.mcjxq.cn
http://s38So10j.mcjxq.cn
http://B423kFmz.mcjxq.cn
http://vjf7Fx8n.mcjxq.cn
http://vYYT5svm.mcjxq.cn
http://fPVFfBOO.mcjxq.cn
http://KQU9yQmC.mcjxq.cn
http://akOSMnDu.mcjxq.cn
http://0XkvZMyO.mcjxq.cn
http://owiQpAdh.mcjxq.cn
http://HUFWmzwO.mcjxq.cn
http://qoB8Oeq0.mcjxq.cn
http://BQf9LIFy.mcjxq.cn
http://J57N4Twm.mcjxq.cn
http://n82F4arh.mcjxq.cn
http://0wpcMIvr.mcjxq.cn
http://d3CWsG1t.mcjxq.cn
http://tJudRYYe.mcjxq.cn
http://p5bF8Jlt.mcjxq.cn
http://PtMguEvE.mcjxq.cn
http://hlCaZhok.mcjxq.cn
http://x8wVjVSk.mcjxq.cn
http://RvP2B6Nr.mcjxq.cn
http://www.dtcms.com/a/383758.html

相关文章:

  • 05.【Linux系统编程】进程(进程概念、进程状态(注意僵尸和孤儿)、进程优先级、进程切换和调度)
  • 【从零开始java学习|小结】记录学习和编程中的问题
  • 图像拼接案例,抠图案例
  • 分层解耦讲解
  • 安装Hadoop中遇到的一些问题和解决
  • 音视频-色域
  • 返利软件的分布式缓存架构:Redis集群在高并发场景下的优化策略
  • 如何让知识上传与查询更便捷
  • set/multiset容器
  • 区块链:搭建简单Fabric网络并调用智能合约
  • Keepalived的详细实操安装流程及其配置文件选项的详解
  • windows下,podman迁移镜像文件位置
  • 技能补全之正则表达式
  • Altium Designer(AD24)打开工程文件的几种方法
  • 26考研——内存管理(3)
  • 知识库缺乏维护和清理机制会造成哪些后果
  • android studio 华为 安装app 层层验证
  • 机器学习(三):决策树
  • 气缸夹爪机构分析
  • np.sum(e_x, axis=-1, keepdims=True)
  • kafka--基础知识点--5.3--producer事务
  • SCI论文组成部分
  • 软考 系统架构设计师系列知识点之杂项集萃(146)
  • C语言之函数
  • A050基于博途西门子1200PLC智能交通灯控制系统
  • shell文本处理三核心:grep(过滤匹配)、sed(流编辑)、awk(结构化分析)
  • 【WIT】编程百问一
  • ros2-tf树查看
  • 速通ACM省铜第四天 赋源码(G-C-D, Unlucky!)
  • MFC仿真