科大讯飞笔试7.29
第一题100%,题目忘了,不过大家第一题好像都做出来了;
第二题60%,数组距离。以两个数组命名为an和bn,取每个|an(i)-bn(i)|与|an(i)+bn(i)|中的最小值,想加,最后通过60%。后来想是不是数值超过整数范围的问题,按这个思路改进了一下,然而并没有成功。
第三题100%,禁点。这题也比较简单,按题设,在不考虑禁点的情况下,和为s的组合有s-1个,再依据给出的禁点,减掉不成立的组合即可。
第二题60%,数组距离。以两个数组命名为an和bn,取每个|an(i)-bn(i)|与|an(i)+bn(i)|中的最小值,想加,最后通过60%。后来想是不是数值超过整数范围的问题,按这个思路改进了一下,然而并没有成功。
第三题100%,禁点。这题也比较简单,按题设,在不考虑禁点的情况下,和为s的组合有s-1个,再依据给出的禁点,减掉不成立的组合即可。
全部评论
第二题改成long就过了,第三题一样的思路
弱弱问一下在哪看完成度啊
第三题只过了20%,考虑了禁着点可能大于s,但是以下代码报错 段错误,请帮忙看下哪里出问题了?
int main() {
int n;
std::cin >> n;
std::vector<int> a(n);
std::unordered_set<int> hash;
for (int i = 0; i < n; ++i) {
int v;
std::cin >> v;
a[i] = v;
hash.emplace(v);
}
int s;
std::cin >> s;
long long res = s - 1;
for (int i = 0; i < n; ++i) {
if (a[i] >= s) continue;
if (hash.count(s - a[i])) --res;
else res -= 2;
}
printf("%lld", res);
}
第二题是数据范围的问题,改成long。请教一下第三题,减掉不成立的组合是什么意思。我的做法是排序a数组,遍历a数组,然后统计a中小于s的个数k,答案是s-1-2*k,这样做有什么问题?
相关推荐

点赞 评论 收藏
分享