2019/09/01 腾讯笔试
3.搬运工 办公室 箱子
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String[] nm = scanner.nextLine().trim().split(" "); int n = Integer.valueOf(nm[0]); int m = Integer.valueOf(nm[1]); int[] a = new int[n]; int boxes = 0; String[] astrs = scanner.nextLine().trim().split(" "); for(int i=0;i<n;i++) { a[i] = Integer.valueOf(astrs[i]); boxes += a[i]; } int cost = 0; int[] b = new int[n]; while(boxes>0) { for(int i = a.length-1;i>=0;i--) { if(b[i]>a[i]&&i+1<a.length) { b[i+1]+=b[i]-a[i]; b[i]=a[i]; boxes-=a[i]; a[i]=0; } else if(b[i]>a[i]) { boxes-=a[i]; a[i]=0; } else { a[i]-=b[i]; boxes-=b[i]; } if(i==0&&m>0) { b[i]+=m; m=0; } } cost++; } System.out.println(cost); }
5.花匠小Q 红花 白花 白花连续摆放数量为k的倍数(倍数可以为0)
public static int[] getDp(int end,int k) { int[] dp = new int[end+1]; dp[0]=1; for(int i=1;i<=end;i++) { if(i<k)dp[i]=1; else dp[i]=dp[i-1]+dp[i-k]; } return dp; } public static int getNumOfZone(int from,int end,int[] dp) { int res = 0; for(int i=from;i<=end;i++) res+=dp[i]; return res; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String[] nk = scanner.nextLine().trim().split(" "); int n = Integer.valueOf(nk[0]); int k = Integer.valueOf(nk[1]); int[][] groups = new int[n][2]; int maxend = 0; for(int i=0;i<n;i++) { String[] astrs = scanner.nextLine().trim().split(" "); groups[i][0] = Integer.valueOf(astrs[0]); groups[i][1] = Integer.valueOf(astrs[1]); maxend = Math.max(maxend, groups[i][1]); } int[] dp = getDp(maxend,k); for(int i=0;i<n;i++) { System.out.println(getNumOfZone(groups[i][0],groups[i][1],dp)); } }