【发布时间】:2020-05-24 15:27:55
【问题描述】:
https://www.hackerrank.com/challenges/gridland-metro/problem 这是黑客等级问题的链接。
#include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
int tot = n * m;
vector<vector<int>> track;
for (int i = 1; i <= n; i++) {
track[i][0] = INT_MAX;
track[i][1] = INT_MIN;
}
while (k--) {
int r, c1, c2;
scanf("%d%d%d", &r, &c1, &c2);
if (track[r][0] > c1 && track[r][1] < c2) {
if (track[r][0] == INT_MAX && track[r][1] == INT_MIN) {
track[r][0] = c1;
track[r][1] = c2;
tot -= c2 - c1 + 1;
} else {
tot -= (track[r][0] - c1) + (c2 - track[r][1]);
track[r][0] = c1;
track[r][1] = c2;
}
} else if (track[r][0] <= c1 && track[r][1] >= c2) {
tot -= 0;
continue;
} else if ((track[r][1] > c1 && track[r][0] < c1) && track[r][1] < c2) {
c1 = track[r][1] + 1;
tot -= c2 - c1 + 1;
}
}
printf("%lld", tot);
}
这是我的问题代码,我在这方面遇到了分段错误。 PLz 告诉我执行这个程序的正确方法,因为我猜我的代码是蛮力的,如果它是正确的
【问题讨论】:
-
您的问题是为什么您不能从随机的hackerrank 或其他在线法官网站学习C++ 的证据。
vector<vector< int>> track; for(int i=1;i<=n;i++) { track[i][0]=INT_MAX; track[i][1]=INT_MIN; }-- 请看那个代码。向量不会自行调整大小。简而言之,hackerrank 和其他网站假设您对所使用的语言有足够的了解,并将他们的问题集中在数据结构、算法和数学技巧上。 -
对上面的轻微修正:
vectors 可以调整自己的大小,但如果您使用[]运算符则不会。[]是为了模仿使用[]访问普通旧数组的行为而构建的:具有零错误检查或调整大小等特殊功能的极快访问。 Consultstd::vectordocumentation 了解如何正确使用vector。 -
See the documentation。查看 Modifiers 部分和constructor。您需要构造您的向量,在构造函数参数中为其指定大小,或者通过调用该链接处的修改器函数之一来修改它。
标签: c++ c++11 compiler-errors segmentation-fault c++14