腾讯笔试 完整题目+答案 第二题 太难了
1.0 0.2 1.0 1.0 1.0
第一题:
代码:
思路就是 1.分别 求盒子的 奇数a1和偶数b1 钥匙的奇数a2和偶数b2
2.结果为:min(a1,b2)+min(a2,b1) 奇数盒子所能开的最大数量+ 偶数盒子所能开的最大数量
第二题:
题目:
测试用例:
代码:成功骗了0.2
package tenxun.排队;
import java.util.Scanner;
/**
* @author MuChengFeng on 2019/9/1
*/
public class Main {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
if(n==2){
System.out.println(3);
}else {
System.out.println(6);
}
}
} 第三题
测试用例:
代码:
#include <cstdio>
using namespace std;
typedef long long ll;
int a[100050];
int n, m, t;
ll sum, k;
bool cal(ll x) {
sum = 0;
k = m;
for(int i = 1; i <= t; i++) {
sum += a[i];
while (sum + i >= x) {
sum -= x - i;
if (--k < 0) return false;
}
}
return k == 0 ? sum <= 0 : true;
}
int main() {
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
sum += a[i];
if(a[i]) t = i;
}
ll l = t + 1, r = sum + t;
while (l <= r) {
ll mid = (l + r) / 2;
if (cal(mid)) r = mid - 1;
else l = mid + 1;
}
printf("%lld\n", l);
} 第四题:
题目:
测试用例:
代码:
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 100005;
int n, h[N], st[N], top, l[N], r[N];
ll sum[N];
int main() {
while (~scanf("%d", &n)) {
top = 0;
for(int i = 0; i < n; ++i) {
scanf("%d", h + i);
sum[i + 1] = sum[i] + h[i];
while(top > 0 && h[st[top - 1]] >= h[i]) --top;
l[i] = top == 0 ? 0 : st[top - 1] + 1;
st[top++] = i;
}
top = 0;
for(int i = n - 1; i >= 0; --i) {
while(top > 0 && h[st[top - 1]] >= h[i]) --top;
r[i] = top == 0 ? n : st[top - 1];
st[top++] = i;
}
long long ans = 0;
for(int i = 0; i < n; ++i) ans = max(ans, (long long)h[i] * (sum[r[i]] - sum[l[i]]));
printf("%lld\n", ans);
}
return 0;
} 第五题:
题目:
测试用例:
代码:
#include <cstdio>
#include <iostream>
using namespace std;
typedef long long ll;
const int N = 100000;
ll dp[N+5][2];
ll sum[N+5];
const int mod = 1e9 + 7;
void init(int k) {
dp[0][0] = 1;
for (int i = 1; i <= N; i++) {
dp[i][0] = (dp[i-1][0] + dp[i-1][1]) % mod;
for (int j = k; j <= i; j += k) dp[i][1] = (dp[i][1] + dp[i-j][0]) % mod;
sum[i] = (sum[i-1] + dp[i][0] + dp[i][1]) % mod;
}
}
int main() {
int k, n;
scanf("%d %d", &n, &k);
init(k);
while (n--) {
int a, b;
scanf("%d %d", &a, &b);
printf("%lld\n", (sum[b] - sum[a - 1] + mod) % mod);
}
return 0;
} 
阿里云工作强度 667人发布