磨刀
来源:互联网 发布:word 矩阵对齐 编辑:程序博客网 时间:2024/06/10 06:18
1.
问题描述:给定一个序列,长度为n(1 <= n <= 10^8),询问元素和能被k整除的连续字串的最大长度。
输入描述:先输入n,表示序列长度,接下来输入n个数。
5
1 2 3 4 5
输出描述:输出满足条件的最大长度。
5
分析:计算以每个位置结尾的序列和,并对k取模。如果有两个位置模相等,则这两个位置之间的数(包含右边位置本身)之和就是k的倍数。
#include <cstdio>#include <map>#include <iostream>using namespace std;#define ll long long#define MAX(a, b) ((a) > (b)? (a): (b))#define MIN(a, b) ((a) > (b)? (b): (a))const int num = 1e6 + 5;const int MAXN = 0x3f3f3f3f;//INT_MAX; int a[num], n, k, res;int dp[num];int main() { //freopen("data/meituan1.txt", "r", stdin); while (scanf("%d", &n) != EOF) { for (int i = 0; i < n; ++i) { scanf("%d", &a[i]); } scanf("%d", &k); dp[0] = a[0] % k; res = dp[0] == 0 ? 1 : 0; for (int i = 1; i < n; ++i) { dp[i] = (dp[i - 1] + a[i]) % k; if (dp[i] == 0) res = i + 1; } for (int i = 1; i <= k; ++i) { int l = 0, r = n - 1; while (dp[l] != i && l < r) ++l; while (dp[r] != i && l < r) --r; res = MAX(res, r - l); } printf("%d\n", res); } return 0;}
阅读全文
0 0
- 磨刀
- 磨刀
- 磨刀人
- 大学炼钢,工作磨刀
- 磨刀与砍柴
- 怎样磨刀才锋利
- :( 砍柴不误磨刀工
- 砍柴常误磨刀工
- 磨刀也误砍柴工
- 如何简简单单地自己动手磨刀
- “磨刀”真的不误“砍柴”工吗?
- 磨刀不误砍柴功切实感受
- 磨刀:mac 上简洁搭建ejabberd 环境
- 用硬盘磨刀需要注意保护盘片表面
- VB.NET机房个人重构版-磨刀篇(一)
- 磨刀室-文本编辑之word转pdf方法总结
- 磨刀不误砍材工 - 环境搭建(为什么要配置环境变量)
- 磨刀不误砍材工 - Java的基础语言要素(关键字)
- 插入排序的原理和代码实现
- Python实现检测文件的MD5值来查找重复文件
- php 、html网页解决乱码问题(设置utf-8)
- python初学笔记-类和装饰
- 一些总结
- 磨刀
- rabbitMQ模拟消息队列群发邮件
- Python遍历文件夹下所有文件及目录
- POJ 2187 Beauty Contest (求最远点对,凸包+旋转卡壳)
- Cygwin-添加到右键菜单脚本--一键安装、卸载
- phpstudy安装pcntl扩展
- JSP学习(三)-----九大内置对象详解和四大作用域
- Android Studio中File对象的FileList()方法返回NULL的问题
- 若你是没信心的程序媛,说明你少了个引路人