【编程题目 |200分】挑选货物【2021 Q1 考试题】
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld
本题可使用本地IDE编码,不能使用本地已有代码,无跳出限制,
编码后请点击”保存并调试“按钮进行代码提交。
■ 题目描述
2.司机小王到仓库拉货,仓库管理员已经提前将货物打包装箱,并摆成一排。
包装箱从1开始编号。各个包装箱存放的货物数组成一个集合M={M1,M2,…,Mn}。
货车一次最多运送K件货物。
为了最大化动力,小王想一次从中挑选K的整数倍件货物,再分批运输。
仓库管理员为了方便管理,要求小王必须选择连续的包装箱,如可选择1、2、3号箱,不能选2、4、6号箱。
如果运输K整数倍件货物,请帮小王计算有多少种挑选方式。
输入描述
包装箱数为N,货车一次运送货物的最大数量为K。
各个箱子存放的货物数为M1,M2,M3,…
输入为两行,格式如下:
N K
M1 M2 M3 M4 …
N和K的取值范围皆为[1,100000]
第i个包装箱存放货物的取值范围也是[1,100000]
输出描述
一行输出有多少种挑选方式,如果不存在可行的挑选方式,请输出0。
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
4 1
1 2 3 4
输出
10
解释
无论怎么拿都是1的倍数,所以可以拿1个,2个,3个,4个。
示例2 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
6 4
1 2 3 4 5 6
输出
3
解释
4
3,4,5
2,3,4,5,6
C++
剩余50%内容,购买单篇文章或订阅会员后查看
#include <bits/stdc++.h> using namespace std; const int len = 1e5 + 5; int N, K; int res = 0; map<int, int> mp; int sum[len] = {0}; int main() { int a[len] = {0}; cin >> N >> K; int goods; for (int i = 0; i < N; i++) { cin >> goods; if (i == 0) sum[0] = goods % K; else sum[i] = (sum[i - 1] + goods) % K; mp[sum[i]]++; } ++mp[0]; for (int i = 0; i < K; i++) { res += mp[i] * (mp[i] - 1) / 2; } cout << res << endl; return 0; }
[/rihide]
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。