科大讯飞07-29笔试
选择题不好做感觉,我也不知道做得啥样。
编程题三道都AC了,算是运气比较好
第一题是冰点那个好像,印象不深了,比较简单;
第二题是数组距离,求两个数组a和b每个元素的差的绝对值,可以不限制把每个元素乘以-1,求最小的距离。我的思路是在输入b数组时,就开始计算 |a[i]-b[i]| 和 |a[i] + b[i]| ,取二者小的值加到最终结果里。int 类型卡60%,这个是要注意的地方。之前有次笔试就是吃了这个亏;
第三题是正整数拆分。拆分成两个正整数,给定一个禁点数组,数组内的数不能被作为拆分因子。先是模拟,遍历到s,优化到s-2发现都只能过20%,意识到不能这样模拟。
最终想到用总方案-禁点数。这里有个坑,不能直接减 unordered_set 的size,题目中禁点的范围可能超出s,所以要判断,而且要考虑成组出现的禁点,比如s是10,禁点是1和9时,就不能乘以2,禁点是1和2,这种不是成组的,就可以乘2。最终的count也要注意类型。
编程题三道都AC了,算是运气比较好
第一题是冰点那个好像,印象不深了,比较简单;
第二题是数组距离,求两个数组a和b每个元素的差的绝对值,可以不限制把每个元素乘以-1,求最小的距离。我的思路是在输入b数组时,就开始计算 |a[i]-b[i]| 和 |a[i] + b[i]| ,取二者小的值加到最终结果里。int 类型卡60%,这个是要注意的地方。之前有次笔试就是吃了这个亏;
第三题是正整数拆分。拆分成两个正整数,给定一个禁点数组,数组内的数不能被作为拆分因子。先是模拟,遍历到s,优化到s-2发现都只能过20%,意识到不能这样模拟。
最终想到用总方案-禁点数。这里有个坑,不能直接减 unordered_set 的size,题目中禁点的范围可能超出s,所以要判断,而且要考虑成组出现的禁点,比如s是10,禁点是1和9时,就不能乘以2,禁点是1和2,这种不是成组的,就可以乘2。最终的count也要注意类型。
全部评论
第三题只过了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);
}
请问笔试都是ACM模式 需要自己写输入输出吗
相关推荐
点赞 评论 收藏
分享