如何使问题的代码使用更少的内存来通过测试?



我正在尝试解决我在网上发现的一个问题,但我一直得到内存错误。

你需要织一条围巾,为一个循环你需要Kmm的绳子,对于/|MP毫米。目标是找出长度为H的线的个数。你需要完成围巾。

在第一行输入2个变量:T,R.

在第二行输入:K,M,PH.

然后输入TR字符。

一个例子:输入:

3 20
4 7 4 128
|...|//./|..|||..|./
../....||/...||.|/||
|||///||/.|||///|//.

输出:

3

这个文件正在测试这个问题。

我怎样才能使代码使用更少的内存?

我试着用我写的代码:

#include <iostream>
using namespace std;
int main() {
int t, r, k, m, p, h, a, ans, i, j;
ans = 0;
a = 0;
cin >> t >> r;
string knit[t];
cin >> k >> m >> p >> h;
for (i = 0; i < t; i++) {
cin >> knit[i];
}
for (i = 0; i < t; i++) {
for (j = 0; j < r; j++) {
if (knit[i][j] == '.') {
a += k;
}

else if (knit[i][j] == '/') {
a += m;
}

else {
a += p;
}
}
}
while (a > 0) {
a -= h;
ans++;
}
cout << ans;
}

它工作得很好,但是我一直得到内存限制错误。

我对你的例程做了以下改进:

  • 现在需要创建一个数组,我们只需要为一行分配足够的内存。
  • 我超额分配了所需的内存,即允许一行中有1024个字符,但我们将只处理输入长度
  • 我使用查找表将缝线图案映射到数字
  • 最后,我使用整数数学来计算所需的结果-它通过在除以h
  • 之前预先添加(h - 1)来实现舍入
#include <iostream>
using namespace std;
int main() {
int t, r;
cin >> t >> r;
int k, m, p, h;
cin >> k >> m >> p >> h;
int table[256] = { };
table['.'] = k;
table['/'] = m;
table['|'] = p;
int x = 0;
for (int i =0; i < t; i++) {
char line[1024] = { };
cin >> line;
for (int j = 0; j < r; j++) {
x += table[line[j]];
}
}
cout << ((x + h - 1) / h) << 'n';
return 0;
}

最新更新