只记录下第一题和第二题是咋做的哈,第三题根本就没见到

AC两道也是白费,因为据传小红书hc在个位数。。。又是几万人抢个位数hc的悲惨剧情。
就当记录一下吧,整体上笔试难度不难,没有动态规划 滑动窗口 回溯等等复杂的算法思维,前两题基本就是模拟题。第三题看蒙了没时间了。
第一题:
排队
题目大意:说有个劳碧登国王,每天的工作啊贼忙,完了还有挺多大臣跟他汇报工作,说有这么一天来了n个大臣汇报工作,然后每个人序号是i,国王为了能快点听完这帮人墨迹就决定设计个算法,让这些大臣根据事情重要程度排序,大臣根据排序进行汇报,每个大臣的汇报会在m个方面各评估一个重要性,每个大臣的汇报重要性就是m个方面的总和,重要性越高排名就越靠前,当然了如果俩人重要性一样就按照序号排序,序号小的排前面。然后这时候序号为id的大臣找到皇家信息技术部门的你,让你帮他算算他第几个汇报。
输入:
第一行三个整数 n m id 分别表示n个大臣,m代表重要性方面数量 id就是找你办事的大臣的序号
然后就是 n行 m列的矩阵。
3 3 290 90 9080 100 9080 85 85
输出:
输出正整数 表示序号为id的大臣第几个汇报
2
思路:
其实巨简单,就是题目太绕,我是这么做的,上边的矩阵,第一行就代表第一个大臣有三件事汇报,分别占90 90 90的重要度,重要性权重就是270,以此类推,就可以推出每个大臣的重要性权重,存在了sum数组中。
然后开辟了一个哈希表,映射关系是 id->rank,就是序号为id的大臣的排名的映射关系。
这里直接一个双重循环,i表示当前id=i的重要性总和,如果i==j就跳过,sum[j]>sum[i]就表示有比 i 大臣 的事情重要的,i 大臣的 rank++;再次就是 sum[i]==sum[j] 的情况,这时候还得比一下谁的id小,id小的就 rank++
最后把每个人的排名都算完,直接通过题目要求的id get到哈希表中对应的 rank输出就AC了。
public static void main(String[] args){Scanner sc = new Scanner(System.in);while(sc.hasNext()){//输入第一行数据String[] strs = sc.nextLine().split(" ");int n=Integer.parseInt(strs[0]),m=Integer.parseInt(strs[1]),id=Integer.parseInt(strs[2]);//记录每一行的权重int[] sum = new int[n+1];//输入矩阵数据 直接记录每一行权重和数组for(int i=1;i<=n;i++){String[] tmpStrs = sc.nextLine().split(" ");int tmpSum = 0;for(int j=0;j<m;j++){tmpSum+=Integer.parseInt(tmpStrs[j]);}sum[i] = tmpSum;}//申请哈希表 HashMap<id,paiming>HashMap<Integer,Integer> map = new HashMap<>();//记录当前id的排名情况for(int i=1;i<=n;i++){int paiming = 1;for(int j=1;j<=n;j++){if(i==j)continue;//如果有比当前权重大的 排名加加if(sum[j]>sum[i])paiming++;//如果权重相等,比较iif(sum[i]==sum[j]&&i>j){paiming++;}}//最后更新id->排名表map.put(i,paiming);}//输入id对应哈希表即可System.out.println(map.get(id));}}
第二题:
法术
题目大意:说有个魔术它会n种法术,第i种法术的威力是 ai,他会两只手各自释放一种法术,可以达到 威力乘积 的效果,两只手不能释放同一种法术,现在要求他必须释放威力值至少为K,求问有多少种方案。
输入:
第一行两个正整数 n和K,表示法术数量和威力值需求第二行是n个正整数 (a1,a2,a3,,,,an)
输出:
输出威力值至少为K的方案数
思路:
双循环暴力法
咱也不知道为啥就过了。
public static void main(String[] args){Scanner sc = new Scanner(System.in);while(sc.hasNext()){//第一行输入String[] firstStrs = sc.nextLine().split(" ");int n = Integer.parseInt(firstStrs[0]),K = Integer.parseInt(firstStrs[1]);//第二行输入String[] secondStrs = sc.nextLine().split(" ");int[] magicNums = new int[secondStrs.length];for(int i=0;i<magicNums.length;i++)magicNums[i] = Integer.parseInt(secondStrs[i]);//直接双循环int len = magicNums.length;//base caseif(len == 1)System.out.println(0);int res = 0;for(int i=0;i<len;i++){for(int j=i+1;j<len;j++){if(magicNums[i]*magicNums[j]>=K)res=res+2;}}System.out.println(res);}}
今年的秋招真是太惨烈了, Winter is coming...





