【HackerRank】Bus Station
有n组好朋友在公交车站前排队。第i组有ai个人。还有一辆公交车在路线上行驶。公交车的容量大小为x,即它可以同时运载x个人。 当车站来车时(车总是空载过来),一些组从会队头开始走向公交车。 当然,同一组的朋友不想分开,所以仅当公交车能容纳下整个组的时候,他们才会上车。另外,每个人不想失去自己的位置,即组的顺序不会改变。 问题时如何选择公交车的容量大小x使得它可以运走所有组的人,并且公交车每次从车站出发时没有空位?(在车里的总人数恰好达到x)?
输入格式
第一行只包含一个整数n。第二行包含n个空格分隔的整数a1,a2,…,an。
输出格式
按递增顺序输出所有可能的公交车的容量。
题解:假设一共total_people个人,那么满足条件的车的容量一定能够整除total_people;于是就枚举total_people的因子们,然后看每个因子是否能满足条件。再看每个因子是否能满足条件的时候,通过遍历数组就可以做到了,由于每组不愿意放弃自己的位置,所以就可以从前往后模拟上车,如果在某一趟上车时有一个组无法正好上车,那么对应的x就不满足条件了。
主要注意两点:
- 枚举total_people因子的时候,只用从1枚举到sqrt(total_people),因为知道total_people的一个因子r,就可以通过total_people/r得到另外一个因子了。要特别处理的情况是r=total_people/r的情况,此时只留一个因子;
- 还要注意最后一趟上车要保证剩下的人全部上车(参见代码17行)。
代码如下:
1 import java.io.*; 2 import java.util.*; 3 import java.math.*; 4 5 6 public class Solution { 7 private static boolean Check(int[] groups,int d){ 8 int curPeople = 0; 9 for(int i = 0;i < groups.length;i++) 10 { 11 curPeople += groups[i]; 12 if(curPeople > d) 13 return false; 14 if(curPeople == d) 15 curPeople = 0; 16 } 17 return curPeople == 0; 18 } 19 public static void main(String[] args) { 20 Scanner in = new Scanner(System.in); 21 int n = in.nextInt(); 22 int total_people = 0; 23 int[] groups = new int[n]; 24 25 for(int i = 0;i < n;i++){ 26 groups[i]= in.nextInt(); 27 total_people += groups[i]; 28 } 29 30 ArrayList<Integer> answer = new ArrayList<Integer>(); 31 32 for(int d = 1;d*d <= total_people;d++){ 33 if(total_people % d == 0){ 34 if(Check(groups, d)) 35 answer.add(d); 36 if(total_people/d != d && Check(groups, total_people/d)) 37 answer.add(total_people/d); 38 } 39 } 40 answer.sort(null); 41 42 StringBuffer sb = new StringBuffer(); 43 for(Integer i:answer) 44 sb.append(i).append(" "); 45 System.out.println(sb.toString()); 46 47 } 48 }
分类:
HackerRank
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了