C++de一道题

来源:百度知道 编辑:UC知道 时间:2024/06/09 11:00:45
切 割 纸 张

Time Limit:1000MS Memory Limit:65536K
Total Submit:98 Accepted:34

Description

把一张矩形的纸按平行于边的方向剪开,会得到很多矩形小纸片。如下图所示,最外围的矩形表示纸张,中间的线条表示切口。以下图中的切割方法,竖直方向上被切为5部分,水平方向上被切为3部分。如果我们记竖直方向上每部分的宽度为ai,竖直方向上每部分的高度为bi的话,这个切割方案就可以唯一确定了。

你的任务是,给定一个切割方案,请编写程序计算一下:在此切割方案之下,最终得到的矩形小纸片有多少种(同样大小的记为一种)。

Input

第一行为两个整数 m(2 <= m <= 100 )、 n(2 <= n <= 100 ),分别表示竖直方向和水平方向切割几部分。
第二行为m个整数,分别表示竖直方向上每个部分的宽度ai(1 <= i <= m),每个整数都不小于1,不大于50。
第三行为n个整数,分别表示水平方向上每个部分的高度bi(1 <= i <= n),不大于50。

Output

文件中只有一个整数,表示得到的小纸片的种数。

Sample Input

3 3
1 2 3
1 3 4

Sample Output

8

要标准C++易懂程序

我做了个答案 不过方法不太好,遍历的效率低
结果运行正确

//遍历所有矩形的方法来求解

#include "iostream.h"

int lookfor(int m, int n, int *l_width, int *w_width)
{
int num = m*n;
int a[100]={-1},i=0,bo=0;
for(int j=0; j<m*n; j++) //遍历所有矩形
{
for(int p=0;p<i;p++) //判断是否有重复的
{
if(j == a[p])
{
bo++;
}
}
if(bo == 0) //若不是重复的矩形(之前没有出现过)
{
for(int k=j+1; k<m*n; k++)
{
if((w_width[k/m] == l_width[j%m] && l_width[k%m] == w_width[j/m])
|| (w_width[k/m] == w_width[j/m] && l_width[k%m] == l_width[j%m])) //判断高度宽度是否相同
{
num--;
a[i++]=k;
}
}
}
bo = 0;
}
return num;
}