HZAU 1209 Deadline (技巧)

来源:互联网 发布:索信达数据 编辑:程序博客网 时间:2024/06/05 10:30

Description

There are N bugs to be repaired and some engineers whose abilities are roughly equal. And an engineer can repair a bug per day. Each bug has a deadline A[i].

Question: How many engineers can repair all bugs before those deadlines at least?

1<=n<= 1e6. 1<=a[i] <=1e9


Input Description

There are multiply test cases.

In each case, the first line is an integer N , indicates the number of bugs.

The next line is n integers indicates the deadlines of those bugs.


Output Description

There are one number indicates the answer to the question in a line for each case.


Input

41 2 3 4


Output

1


题意

程序员一天可以修改一个 bug ,现在给你一些 bug 以及其修复期限,问最少需要多少个程序员才可以完成任务。


思路

首先因为 n 的范围是 [1,106] ,也就是最多有 106bug

假如每一个 bug 找一个程序员来改,那么总共最多有 106 个程序员使用一天的时间完成所有任务,所以修复期限在 106 以上的 bug 我们不用考虑,因为它总能被修复。

对于前 i 天需要修复的 bug ,我们把它在 i 天内平均分配给的人数至少是 (sum1)/i+1 ,也就是 sum/i ,然后找最大的值即可。


AC 代码

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>using namespace std;int a[1000009];const int maxn = 1e6;int main(){    int n,b;    while(~scanf("%d",&n))    {        memset(a,0,sizeof(a));        for(int i=1; i<=n; i++)        {            scanf("%d",&b);            if(b<=maxn)a[b]++;        }        int sum=0,ans=1;        for(int i=1; i<=maxn; i++)        {            sum+=a[i];            int t=((sum-1)/i+1);            ans=max(ans,t);        }        printf("%d\n",ans);    }    return 0;}
1 0
原创粉丝点击