4.26腾讯算法岗笔试总结

第一题
没写出来太丢脸了,题目写了背包两个字,然后我就死活在01背包里面出不来了。脑子一团乱果断下一题。
其实第一题只要看每个怪的收益是否能弥补体力损失就行了,能就打,不能就不打。
0分

第二题
求抛物线y2=ax和直线y=bx+c围成的面积。直接积分推公式。
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    int t;
    cin >> t;
    while (t--) {
        double a, b, c;
        cin >> a >> b >> c;
        double delta = 4 * a * (a - 2 * b * c);
        if (delta <= 0) {
            cout << 0 << endl;
        } else {
            double diff = sqrt(delta) / b;
            double sum = (2 * a - 2 * b * c) / b + 2 * c;
            double prod = 2 * c * c + 2 * c * (a - b * c) / b;
            double area = (-1.0 / 6.0 / a) * diff * (sum * sum - prod) + (1.0 / 2 / b) * sum * diff - c / b * diff;
            printf("%.7f\n", area);
        }
    }
    return 0;
}
AC


第三题
n个人排排坐,每个人说1-m中的一个数,如果相邻两个人说一样的数就冲突。求冲突的种类数。
数据范围比较大。
纯数学题。
推公式推出来答案是 mn-m*(m-1)n-1 写一个快速幂就行。
#include <iostream>
using namespace std;

const long long M = 100003;

long long pow(long long a, long long b) {
    if (b == 0) return 1;
    long long k = pow(a, b / 2);
    long long ans = (k * k) % M;
    if (b % 2 == 1) {
        ans = (ans * a) % M;
    }
    return ans;
}

int main() {
    long long m, n;
    cin >> m >> n;
    cout << ((pow(m, n) - m * pow(m-1, n-1)) % M + M) % M;
    return 0;
}
AC


第四题
这题我还挺有把握,没想到怎么交都是0分,讲一下思路。
注意到ai很小 最多100,所以我们先排序,然后对每一种和(2~200),双指针O(N)求解。
(好像哈希表更简单)
0分

第五题
裸并查集,不用按秩合并也能过。
#include <iostream>
using namespace std;


const int N = 10000000;
int f[N+1], k[N+1];

int find(int x) {
    if (f[x] == x) return x;
    return f[x] = find(f[x]);
}

int main() {
    int t;
    cin >> t;
    while (t--) {
        int n;
        cin >> n;
        for (int i = 1; i <= N; ++i) f[i] = i, k[i] = 0;
        for (int i = 1; i <= n; ++i) {
            int x, y;
            cin >> x >> y;
            int xx = find(x), yy = find(y);
            f[xx] = yy;
        }
        for (int i = 1; i <= N; ++i) {
            k[find(i)]++;
        }
        int ans = 0;
        for(int i = 1; i <= N; ++i) {
            ans = max(ans, k[i]);
        }
        cout << ans << endl;
    }

    return 0;
}

AC




#腾讯2021届暑期实习正式批笔试##笔试题目##腾讯#
全部评论
第五题我用并查集只能过15%🤣
点赞 回复
分享
发布于 2020-04-26 23:09
大佬是acm选手吗?
点赞 回复
分享
发布于 2020-04-26 23:31
联易融
校招火热招聘中
官网直投
第一次为什么不是背包问题啊😥,用剩下的血量不能再用吗
点赞 回复
分享
发布于 2020-04-26 23:39
最后一题python开并查集 内存竟然会超,垃圾python倒数第二题我直接 用hash做 过了30%,其他算超时了其实我也就 O(2000*n)的复杂度
点赞 回复
分享
发布于 2020-04-27 00:18

相关推荐

7 18 评论
分享
牛客网
牛客企业服务