codeforces 1101B. Planning The Expedition

题目链接

题目描述

娜塔莎正计划为当地人去火星探险。重要的任务之一是为每个参与者提供食
物。仓库每天都有食品包装。每个包裹都有一些食物类型的ai。每个参与者
必须每天吃一包食物。由于极端的负荷,每个参与者都必须在整个探险过程
中吃同样的食过程中吃同样的食物。不同的参与者可能吃不同(或相同)类型
的食物。正式地说,对于每个参与者,j娜塔莎应该选择他的食物类型bj和
每天j-的参与者将吃一个食品包类型的bj。不同参与者的bj值可能不同。按
照上述要求,探险队可以持续的最大天数是多少?

Input

第一行包含两个整数nn和m(1≤n≤100,1≤m≤100)-探险队参加人数和可
用的每日食品包数。

Output

打印单个整数-探险队可以持续的天数。如果连一天都无法计划远征,请打
印0。

Examples

input

4 10
1 5 2 1 1 1 2 5 7 2

output

2

input

100 1
1

output

0

input

2 5
5 4 3 2 1

output

1

input

3 9
42 42 42 42 42 42 42 42 42

output

3

解题思路

思维转化,枚举每一天看看考察队能不能活过第 i 天。或者说如果探险队要活过第 i 天最多可以
有多少个人。如第一个样例 1(4个), 2(2个),5(3个),7(1个)。如果探险一天可以养活
4/1+2/1+3/1+1/1 (10)个人, 如果探险两天可以养活4/2+2/2+3/2+1/2 (4个)探险三天
可以养活4/3+2/3+3/3+1/3 (2个).......

Note

在第一个示例中,Natasha可以将第1类型的食物分配给第一参与者,类型1
分配给第二位,类型5分配给第三位,类型2分配给第四位。在这种情况下,
考察可以持续2天,因为每个参与者都可以获得他的食物类型的两个食品包
(将使用4个1型包、两个类型2包和两个5型包)。在第二个例子中,有100个
参与者,只有一个食品包。在这种情况下,探险队甚至不能持续一天。

I have a dream!A AC dream!!

/*
                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
             .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  `- \`.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
         I have a dream!A AC dream!!
*/
# include<cstdio>
# include<cstring>
# include<algorithm>
using namespace std;

int n, m;
int a[105], b[105];

int main()
{
    while(scanf("%d%d", &n, &m)!=EOF)
    {
        int ans = 0;
        for(int i=0; i<m; i++)
        scanf("%d", &a[i]);

        for(int i=0; i<m; i++)
            b[a[i]]++;    //b[i]表示 i 种食物有 b[i]个

        for(int i=1; i<=100; i++)
        {
            int sum = 0;
            for(int j=1; j<=100; j++)
            {
                sum = sum + b[j]/i;
            }
            if(sum>=n)
            ans=i;   //更新天数
            else break;  //可以养活的人数效应 n 退出循环
        }
        printf("%d\n", ans);
        for(int i=0; i<100; i++)
        {
            a[i] = 0;
            b[i] = 0;
        }
//      
//      for(int i=0; i<m; i++)
//      printf("%d ", b[i]);
//      printf("\n");
//      for(int i=0; i<m; i++)
//      printf("%d ", a[i]);

    }

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值