码迷,mamicode.com
首页 > 其他好文 > 详细

CF1011B

时间:2018-07-29 00:09:59      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:排序   body   题目   输入   ret   math   表示   http   个人   

题目链接

题目描述

有N个人M份食物,每人每天吃一份食物,每份食物有一个种类ai,一个人从开始到结束只能吃一种类型的食物,问最多能坚持几天.

输入输出格式

输入格式:

第一行n,m
第二行m个数,表示每份食物的种类

输出格式:

一个整数,表示最大能坚持的天数.

样例

输入样例 输出样例
4 10 2
1 5 2 1 1 1 2 5 7 2
100 1 0
1

思路

1.二分

统计每种类型食物份数
然后从大到小排序
二分最大天数
枚举统计是否成立

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <list>
#include <set>
#include <map>
#define ll long long
#define ull unsigned long long
#define ci const int&
#define cl const long long&
#define cul const undigned long long&
#define io_f std::ios::sync_with_stdio(false)
using namespace std;

int n,m;
int arr[101];

inline bool cmp(ci x,ci y) {
    return x>y;
}

inline bool check(ci x) {
    int tmp=n;
    for(int i=1;i<=m&&tmp>0;i++) {
        tmp-=arr[i]/x;
    }
    if(tmp<=0)return 1;
    return 0;
}

int main() {
    io_f;
    int a;
    cin>>n>>m;
    for(int i=1;i<=m;i++) {
        cin>>a;
        arr[a]++;
    }
    sort(arr+1,arr+100+1,cmp);
    int l=0,r=200;
    while(l+1<r) {
        int mid=(l+r)>>1;
        if(check(mid))l=mid;
        else r=mid;
    }
    cout<<l;

    return 0;
}

CF1011B

标签:排序   body   题目   输入   ret   math   表示   http   个人   

原文地址:https://www.cnblogs.com/ullio/p/9383824.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!