2023-09-10 腾讯后台开发笔试

牛牛的服务器怎么炸了啊。。。。

最后的结果 100, 未知, 100, 100, 未知

  1. 二叉树dfs找节点(100分)
  2. multiset维护中位数(没出结果)
#include <bits/stdc++.h>

using i64 = long long;

void solve() {
    int n;
    std::cin >> n;
    std::vector<i64> a(n), b(n - 1);
    std::multiset<i64> S;
    for (int i = 0; i < n; i++) {
        std::cin >> a[i];
        S.insert(a[i]);
    }
    for (int i = 0; i < n - 1; i++) {
        std::cin >> b[i];
        b[i]--;
    }

    for (int i = 0; i < n; i++) {
        auto mid = S.begin();
        std::advance(mid, (n - i) / 2);
        std::cout << (*mid + *prev(mid, (1 - (n - i) % 2))) / 2;
        if ((*mid + *prev(mid, (1 - (n - i) % 2))) % 2) std::cout << ".5";
        std::cout << " \n"[i == n - 1];
        if (i < n - 1) {
            S.erase(S.find(a[b[i]]));
        }
    }
}

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    int T;
    std::cin >> T;
    while (T--) {
        solve();
    }
    
    return 0;
}
  1. 贪心,先找最大,然后找最小(100分)
#include <bits/stdc++.h>

using i64 = long long;

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    int n;
    std::cin >> n;
    std::vector<i64> a(n);
    for (int i = 0; i < n; i++) {
    	std::cin >> a[i];
    }

    std::sort(a.begin(), a.end());

    i64 ans = 0, cur = 0;
    int i = 0, j = n - 1;
    int flag = 0;
    while (i <= j) {
    	if (!flag) {
    		ans += a[j] - cur;
    		cur = a[j];
    		j--;
    	} else {
    		cur = a[i];
    		i++;
    	}
    	flag ^= 1;
    }

    std::cout << ans << "\n";
    
    return 0;
}
  1. 结论题,可能的序列有个,可能的校验和有种,需要找到不同与S的个数,答案的就是 (100分)
#include <bits/stdc++.h>

using i64 = long long;

constexpr int P = 1e9 + 7;

i64 power(i64 a, i64 b) {
    i64 res = 1;
    for (; b; b /= 2, a = a * a % P) {
        if (b % 2) {
            res = res * a % P;
        }
    }
    return res % P;
}

void solve() {
	i64 n, m;
	std::cin >> n >> m;
	std::cout << (power(2, n - m) - 1 + P) % P << "\n";
}

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    int T;
    std::cin >> T;
    while (T--) {
    	solve();
    }
    
    return 0;
}
  1. 背包,维护最大能消去的dp状态(没出结果)
#include <bits/stdc++.h>

using i64 = long long;

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    int n, k;
    std::cin >> n >> k;
    std::vector<i64> dp(k + 10, 0);
    i64 sum = 0;
    for (int i = 0; i < n; i++) {
        std::vector<i64> v;
        v.push_back(0);

    	int x;
    	std::cin >> x;
        sum += x;

        while (x) {
            v.push_back(v.back() + (1 << __builtin_ctz(x)));
            x ^= (1 << __builtin_ctz(x));
        }

        auto tmp = dp;

        for (int j = 0; j <= v.size(); j++) {
            for (int u = 0; u <= k; u++) {
                if (u >= j) tmp[u] = std::max(tmp[u], dp[u - j] + v[j]);
            }
        }
        dp = tmp;
    }

    std::cout << std::max(0ll, sum - dp[k]) << "\n";

    
    return 0;
}
#我的实习求职记录##腾讯#
全部评论

相关推荐

06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
评论
3
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务