c++ - 如何减少内存使用?来自代码力量的问题
问题描述
我从 codeforces 解决了这个问题:https ://codeforces.com/problemset/problem/1471/B 。但是当我上传它时,它说超出了内存限制。如何减少内存使用量?我使用 C++ 来解决这个问题。问题如下:“你给了一个长度为 n 的数组 a 和一个整数 x 给一个全新的机器人。机器人所做的如下:它遍历数组的元素,让当前元素为 q。如果 q 可以被 x 整除,则机器人将整数 qx 的 x 个副本添加到数组的末尾,并移动到下一个元素。注意,新添加的元素可以稍后由机器人处理。否则,如果 q 是不能被 x 整除,机器人关闭。
请在过程结束时确定数组所有值的总和”。
这是代码:
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
int main()
{
vector<int> vec;
vector<int> ans;
int temp;
int t;
cin >> t;
int a = 0;
int n, x;
for(int i=0; i<t; i++){
cin >> n >> x;
while(a<n){
cin >> temp;
a++;
vec.push_back(temp);
}
int q = 0;
while(true){
if(vec[q]%x == 0){
for(int copies=0; copies<x; copies++){
vec.push_back(vec[q]/x);
}
}
else{
break;
}
q++;
}
int sum = 0;
for(int z: vec){
sum += z;
}
ans.push_back(sum);
vec.clear();
a = 0;
}
for(int y: ans){
cout << y << endl;
}
return 0;
}
谢谢。
解决方案
您不需要按照指定构建数组来计算总和
你可能会这样做:
int pow(int x, int n)
{
int res = 1;
for (int i = 0; i != n; ++i) {
res *= x;
}
return res;
}
int compute(const std::vector<int>& vec, int x)
{
int res = 0;
int i = 0;
while (true) {
const auto r = pow(x, i);
for (auto e : vec) {
if (e % r != 0) {
return res;
}
res += e;
}
++i;
}
}
推荐阅读
- prolog - 整数平方根在 SWI-Prolog 和 YAP 中有效,但在 GNU-Prolog 中无效
- php - 如何检测 Laravel 中任何模型的创建
- python - 如何在 Python Jupyter Notebook 的另一个函数中循环一个函数?
- visual-studio-code - 当我关闭应用程序时,什么 Visual Studio Code 设置正在缩小我的 html?
- swift - Swift将数据从弹出窗口发送到另一个视图
- angular - “错误:根应该是 UIViewController 或 UIView” Nativescript
- spring - 得到空答案Mongodb
- javascript - 如何制作一个页面,该页面将保留在页面上,其中包含 reactjs 中的动态问题和选择?
- java - Android Studio:如何在不同的活动中发送和接收类
- authentication - 没有 cookie 的 IdentityServer4 外部身份验证