4.26 腾讯笔试部分代码

1.
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
int n, m, x, y;
struct node {
int c, w;
double p;
node (int a, int b) {
c = a, w = b;
p = (double(b))/a;
}
friend bool operator < (struct node a, struct node b) {
return a.p < b.p;
}
};

int main()
{
scanf("%d %d", &n, &m);

priority_queue<struct node> q;
for (int i = 0; i < n; i++) {
scanf("%d%d", &x, &y);
q.push(node(x, y));
}
int used = 0, hp = 0, earn = 0, ans = 0;
while (!q.empty()) {
struct node now = q.top();
q.pop();
if (hp < now.c) {
int t = (now.c - hp - 1)/m + 1;
used += t;
hp += t * m;
}
hp -= now.c;
earn += now.w;
ans = max(ans, earn - used);
}
printf("%d\n", ans);


return 0;
}

2.
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int T, A, B, C;

double get(double y) {
return y * y/2/B - (1.0*C)/B * y - y*y*y/6/A;
}

int main() {
scanf("%d", &T);
while (T--) {
scanf("%d %d %d", &A, &B, &C);
//int delta = 4 * (B * C - A) * (B * C - A) - 4 * B * B * C * C;
int delta = 4 * A * A - 8 * A * B * C;
if (delta <= 0) {
printf("0\n");
continue;
}
double a = (2 * A + sqrt((double)delta)) / 2.0 / B;
double b = (2 * A - sqrt((double)delta)) / 2.0 / B;
printf("%.6f\n", get(a) - get(b));
}


return 0;
}


3.
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long LL;
const int mod = 100003;
LL fast_pow(LL a, LL x) {
LL ans = 1;
while (x) {
if (x&1) ans = (ans * a) % mod;
a = (a * a) % mod;
x >>= 1;
}
return ans;
}

int main()
{
LL n, m;
scanf("%lld %lld", &m, &n);
printf("%lld\n", ((fast_pow(m, n) - (m * fast_pow(m - 1, n - 1))%mod) + mod)%mod);

return 0;
}

4.
只得了 30 分,没找到 bug
我的思路:
已知 ai + bi = aj + bj, 可得 ai - aj = -(bi - bj)
所以我把每一行的 k = 0, 和 k = 1 做差,进行二分,再对比每一个的 k,这样子可以达到剪枝的效果,结果 WA 了,只拿了 30 分

5.
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 1e7 + 10;
int fa[maxn], cnt[maxn];

int find_fa(int a) {
if (fa[a] == a) return a;
else {
return fa[a] = find_fa(fa[a]);
}
}

void combine(int a, int b) {
int f_a = find_fa(a);
int f_b = find_fa(b);
fa[f_b] = f_a;
}


int main()
{
int T, n, x, y;
scanf("%d", &T);
while (T--) {
for (int i = 0; i < maxn; i++) {
fa[i] = i;
}
int maxx = 0, minn = maxn;
memset(cnt, 0, sizeof cnt);
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d %d", &x, &y);
combine(x, y);
maxx = max(maxx, max(x, y));
minn = min(minn, min(x, y));
}
int ans = 0;
for (int i = minn; i <= maxx; i++) {
cnt[find_fa(i)]++;
//printf("%d: %d\n", i, find_fa(i));
}
for (int i = minn; i <= maxx; i++) {
ans = max(ans, cnt[i]);
//printf("%d: %d\n", i, cnt[i]);
}
printf("%d\n", ans);
}

return 0;
}



#腾讯2021届暑期实习正式批笔试##笔试题目##腾讯#
全部评论
为啥第二题我0分,算法跟楼主一样,示例也过了😂
点赞 回复
分享
发布于 2020-04-26 22:11
厉害
点赞 回复
分享
发布于 2020-04-26 22:12
联易融
校招火热招聘中
官网直投
请教一下(fast_pow(m, n) - (m * fast_pow(m - 1, n - 1))%mod) + mod)%mod) 这边为什么要再加上mod之后再取模呢
点赞 回复
分享
发布于 2020-04-26 22:20
430 强呀
点赞 回复
分享
发布于 2020-04-26 22:28
第4题坑点可能是好多个 0 0 0
点赞 回复
分享
发布于 2020-04-26 23:10
是不是有几套题啊🤣 我咋发现没一道相同的.....
点赞 回复
分享
发布于 2020-04-26 23:43
楼主,感谢您的分享, 感叹一句,人与人的差距,另外我私聊请教您了,希望回复
点赞 回复
分享
发布于 2020-04-27 08:11

相关推荐

点赞 评论 收藏
转发
6 7 评论
分享
牛客网
牛客企业服务