滴滴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); } }