滴滴6.25秋储后端笔试
第一部分 选择题
大概15道单选 5道多选?
数据库操作系统啥的考的挺多,歇菜
修改数据库的名称
多CPU下能否实现多进程中的多线程并发
死锁检测机构?(啥呀啥呀)
内存分配的worst fit机制
根据进程名杀死进程 killall
第二部分
两道编程,一道简单一道中等+,题目描述都很长差点第一题就被唬住了
第一题
小明下载同时下载多个游戏,每个游戏下载速度为vi,剩余下载时间ti。
下载完一个游戏后他的下载速度会分配到其他任务上,问下载完所有游戏需要的时间
总大小 / 总速度
package DiDi;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
double speed = 0;
double sum = 0;
int[] v = new int[n];
int[] t = new int[n];
for (int i = 0;i<n;i++){
v[i] = scanner.nextInt();
speed+=v[i];
}
for (int i = 0;i<n;i++){
t[i] = scanner.nextInt();
sum+=v[i]*t[i];
}
System.out.println(String.format("%.4f",(sum/speed)));
}
}
有n个积木,每个积木长读为2,要在长度为k的空地上将这些个积木摆放下来。
每一个积木必须摆放在前一个积木之上(也就是摆放在它前一格或后一格),问一共有多少种摆法,结果对998244353取模。
开始想着回溯,一看结果还要取个模,就转换思路去想怎么dp了。
package DiDi;
import java.util.Scanner;
public class Main2 {
static int MOD = 998244353;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int k = scanner.nextInt();
// dp[i][j]表示将第i个积木放在起始位置为j的位置有多少种摆法
// 状态转移也很好想,因为当前积木要么放在前一个积木的前上方
// 要么放在前一个积木的后上方,注意边界情况
long[][] dp = new long[n+1][k];
long ans = 0;
for(int i = 1;i<k;i++){
dp[0][i] = 0;
dp[1][i] = 1;
}
for(int i = 2;i<=n;i++){
for(int j = 1;j<k;j++){
dp[i][j] = 0;
if(j>1){
dp[i][j] = dp[i-1][j-1];
}
if(j<k-1){
dp[i][j] = (dp[i][j] + dp[i-1][j+1])%MOD;
}
}
}
for(int i = 1;i<k;i++){
ans = (ans + dp[n][i])%MOD;
}
System.out.println(ans);
}
}
