news 2026/6/2 17:53:54

一个原创好题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一个原创好题

文章目录

  • 一个题

一个题


题目描述
给定一个长度为 n 的正整数数组,以及一个正整数 k。 请你找出和最大的连续且长度至少为1子数组,满足这个和能被 k 整除。 如果不存在这样的子数组,请输出 -1。

输入格式
第一行两个整数 (n, k) 第二行 n 个正整数 (a_i)

输出格式
一行一个整数,表示答案。 若无合法方案输出 -1

输入样例
5 7
1 2 3 4 5

输出样例
14

输入样例
3 7
1 2 3

输出样例
-1

解法:①暴力解(时间复杂度O(n^2),遇到数据量大的样例会超时,作为一个参考解法,不计入标准答案) #include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); long long n, k; cin >> n >> k; vector<long long> a(n); for (int i = 0; i < n; ++i) { cin >> a[i]; } long long ans = -1; for (int i = 0; i < n; ++i) { long long sum = 0; for (int j = i; j < n; ++j) { sum += a[j]; if (sum % k == 0) { ans=max(ans,sum); } } } cout << ans << endl; return 0; }
解法②(前缀和+同余原理)时间复杂度O(n)最优解,建议设为标准答案 #include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); ll n,k; cin>>n>>k; vector<ll> a(n+1); for (int i=1;i<=n;i++) cin>>a[i]; vector<ll> b(n+1); for (int i=1;i<=n;i++) b[i]=b[i-1]+a[i]; unordered_map<ll, ll> ans; ans[0] = 0; ll res = 0; for (int i=1; i<=n; i++) { ll num = b[i] % k; if (num < 0) num += k; if (ans.find(num) != ans.end()) { res = max(res, b[i] - ans[num]); } if (ans.find(num) == ans.end()) { ans[num] = b[i]; } else { ans[num] = min(ans[num], b[i]); } } cout << (res == 0 ? -1 : res) << endl; return 0; }
解法三(kadane算法的变体,以余数作为判断条件,时间复杂度O(n*k),大数据可能会超时) #include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll n, k; cin >> n >> k; vector<ll> a(n + 1); for (int i = 1; i <= n; i++) cin >> a[i]; unordered_map<ll, ll> dp; dp[0] = 0; ll res = -1; for (int i = 1; i <= n; i++) { ll x = a[i]; unordered_map<ll, ll> ndp = dp; for (auto &p : dp) { ll m = p.first; ll s = p.second; ll num = (m + x % k + k) % k; if (ndp.count(num)) ndp[num] = max(ndp[num], s + x); else ndp[num] = s + x; } dp.swap(ndp); if (dp.count(0)&&dp[0]>0) res = max(res, dp[0]); } cout<<res<<endl; return 0; }

备选样例
样例①
输入:
4 7
3 3 14 3
输出:
14

样例②
输入
5 5
2 3 4 1 2
输出
10

样例③(专卡暴力解)
输入
100000 2
1 1 1 1 1 1 1 1 1 1 1…(一共10^5个1)
输出
100000

样例④
输入
4 7
1 1 1 1
输出
-1

样例⑤(专卡int类型不够爆掉)
输入
3 1000000000000
1 999999999999 1
输出
1000000000000
注:此题改编自力扣523题,代码,样例数据类型全自己写,自己敲定,作为老师布置的任务,就是壮大学校内部题库,服了~~~,大佬们有啥建议,多提出,本学生水平有限

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 17:48:03

C#写的PLC上位机小工具,带界面能直接读写寄存器地址

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;一个开箱即用的C# PLC通信上位机程序&#xff0c;基于HslCommunication开源库开发&#xff0c;支持西门子、三菱、欧姆龙等主流PLC型号的数据交互。程序自带Windows窗体界面&#xff0c;可直观配置IP、端口、站…

作者头像 李华
网站建设 2026/6/2 17:47:49

别再写死菜单了!基于u8g2和状态机,设计一个可无限扩展的OLED菜单框架

基于状态机的OLED菜单框架设计&#xff1a;从硬编码到动态扩展的进化之路在嵌入式系统开发中&#xff0c;菜单系统作为人机交互的核心组件&#xff0c;其设计质量直接影响产品的用户体验和维护成本。传统基于索引表的硬编码方式虽然实现简单&#xff0c;但随着功能增加会导致代…

作者头像 李华
网站建设 2026/6/2 17:47:08

从实验室到生产线:我如何用YOLO模型实现工业级实时检测系统

从实验室到生产线&#xff1a;我如何用YOLO模型实现工业级实时检测系统 【免费下载链接】ultralytics Ultralytics YOLO &#x1f680; 项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics 去年夏天&#xff0c;我接到了一个看似简单却极具挑战性的任务&…

作者头像 李华
网站建设 2026/6/2 17:45:05

如何快速掌握通达信数据读取:面向新手的终极Python解决方案

如何快速掌握通达信数据读取&#xff1a;面向新手的终极Python解决方案 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 你是不是经常为获取通达信数据而头疼&#xff1f;那些复杂的二进制格式、繁…

作者头像 李华