cpp题目描述把一张矩形的纸按平行于边的方向剪开会得到很多矩形小纸片。如下图所示最外围的矩形表示纸张中间的线条表示切口。以下图中的切割方法竖直方向上被切为 55 部分水平方向上被切为 33 部分。如果我们记竖直方向上每部分的宽度为 ��a i 水平方向上每部分的高度为 ��b i 的话这个切割方案就可以唯一确定了。file20190519115643_20190519png你的任务是给定一个
解题思路: 根据题目描述,我们可以将纸张按照竖直方向和水平方向切割,得到多个小纸片。我们需要计算在给定的切割方案下,最终得到的矩形小纸片有多少种。
首先,我们可以计算竖直方向切割的宽度之和,记为sum_a。同理,计算水平方向切割的高度之和,记为sum_b。
然后,我们可以根据sum_a和sum_b计算小纸片的种数。根据题目描述,小纸片的宽度和高度都是整数,且宽度等于sum_a/m,高度等于sum_b/n,所以小纸片的种数等于(m-1)*(n-1)。
最后,输出小纸片的种数。
代码实现如下:
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
int sum_a = 0, sum_b = 0;
for (int i = 0; i < m; i++) {
int a;
cin >> a;
sum_a += a;
}
for (int i = 0; i < n; i++) {
int b;
cin >> b;
sum_b += b;
}
int ans = (m - 1) * (n - 1);
cout << ans << endl;
return 0;
}
复杂度分析: 该算法的时间复杂度为O(m+n),其中m和n分别为竖直方向和水平方向的切割部分数目
原文地址: https://www.cveoy.top/t/topic/iN2r 著作权归作者所有。请勿转载和采集!