NC215160. 跨年了,给女朋友准备啥礼物呢?
描述
输入描述
第一行两个正整数N、K,表示棒棒糖原本的根数和毛毛希望得到的棒棒糖根数。
第二行N个正整数表示每根棒棒糖的初始长度。
输出描述
输出一行一个非负整数表示每根棒棒糖的最大长度。
示例1
输入:
5 10 4 4 4 5 3
输出:
1
说明:
如果长度为2,只能得到2+2+2+2+1=9根,不够;长度为1可以得到4+4+4+5+3=20根,足够。所以答案最大是1。示例2
输入:
5 3 1 2 3 4 5
输出:
3
Java(javac 1.8) 解法, 执行用时: 372ms, 内存消耗: 55000K, 提交时间: 2020-12-21 15:33:09
import java.util.*; public class Main { static long a[]; static int n; static int m; public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); m = sc.nextInt(); a = new long[n]; for (int i = 0; i < n; i++) { a[i] = sc.nextLong(); } long l = 0, r = 1000000009,mid; while (l<r-1) { mid = (l+r)>>1; if(check(mid)) l = mid; else { r = mid - 1; } } if (check(l+1)) { l++; } System.out.println(l); } public static boolean check(long x) { int ans = 0; for (int i = 0; i < n; i++) { ans += (a[i]/x); } return ans>=m?true:false; } }
C++(clang++11) 解法, 执行用时: 22ms, 内存消耗: 744K, 提交时间: 2020-12-20 15:04:19
#include <bits/stdc++.h> using namespace std; int n,k; long num[200005]; long maxs = 0; bool chek(long mid) { long ans = 0; for(int i=0;i<n;i++) ans+=num[i]/mid; if(ans>=k) return true; else return false; } int main() { cin>>n>>k; for(int i=0;i<n;i++) cin>>num[i]; long l = 1,r = 1000000000; long mid; while(l<r) { mid = (l+r)/2; if(chek(mid)) { maxs = max(maxs,mid); l = mid+1; } else { r = mid-1; } } cout<<maxs<<endl; return 0; }