ちょっとしたミス(備忘録)
自己紹介
- 所属
九州工業大学情報工学部
- ハンドルネーム
buridaikon
解いた問題
今回のミス
関数のパラメータとして整数型配列を渡すときにポインタを使って参照していなかったことで、実行時間が余計に長くなっていた。(関数に渡すとき、毎回配列のコピーを行ってしまっていた)
提出したコード
#include <iostream>
#include <vector>
using namespace std;
int result(int left, int right, vector<int> sum)
{
int result_num = sum[right] - sum[left-1];
return result_num;
}
int main()
{
int n, k;
cin >> n >> k;
vector<int> vec(n);
for (int i = 0; i < n; i++)
{
cin >> vec[i];
}
vector<int> sum(n + 1, 0);
for (int i = 0; i < n; i++)
{
sum[i + 1] = sum[i] + vec[i];
}
for (int i = 0; i < k; i++)
{
int left, right;
cin >> left >> right;
cout << result(left, right, sum) << endl;
}
return 0;
}
修正後のコード
#include <iostream>
#include <vector>
using namespace std;
int result(int left, int right, vector<int> &sum)
{
int result_num = sum[right] - sum[left-1];
return result_num;
}
int main()
{
int n, k;
cin >> n >> k;
vector<int> vec(n);
for (int i = 0; i < n; i++)
{
cin >> vec[i];
}
vector<int> sum(n + 1, 0);
for (int i = 0; i < n; i++)
{
sum[i + 1] = sum[i] + vec[i];
}
for (int i = 0; i < k; i++)
{
int left, right;
cin >> left >> right;
cout << result(left, right, sum) << endl;
}
return 0;
}
修正箇所
- int result(int left, int right, vector<int> sum)
+ int result(int left, int right, vector<int> &sum)
実行時間への効果
写真より、修正前と修正後で大きく計算量に差があると分かる。少し気を付けるだけでも計算量を少なくできる。