zoukankan      html  css  js  c++  java
  • 秒速五厘米 (牛客二分题)

    链接:https://ac.nowcoder.com/acm/contest/3667/D
    来源:牛客网

    樱花飘落的速度,每秒五厘米。

    动漫《秒速五厘米》中,明里曾在信中写道“我家附近有棵很大的樱花树,到了春天,那棵树上的花瓣,大概也会以每秒五公分的速度飘落,而我则在想,要是能和贵树一起迎接春天的来临该有多好啊。”

    来年春天,他们没能像约定那样一起迎接春天的到来,看樱花飘落。但有一个魔法,可以让他们有m秒的时间一起看樱花飘落,樱花树上有n朵樱花,每朵樱花都有一个高度a[i],樱花飘落的速度为v,樱花只能一朵一朵的飘落,如果某朵樱花飘落的时间不是整数,则那朵樱花飘落所需的时间要向上取整,即,若两朵樱花的高度都为7,飘落的速度为2,则两朵樱花飘落的时间为8,现在你可以控制樱花飘落的速度v,当v为何值时才能使所有的樱花在m秒的时间内全部飘落且v的值要尽可能小。

    输入描述:

    第一行输入两个正整数n和m(1<=n<=m<=2000000)
    第二行输入n个正整数a[i](1<=a[i]<=10000000),分别指的是每朵樱花的高度

    输出描述:

    输出一个正整数v,代表樱花最合适的速度
    示例1

    输入

    复制
    2 10
    5 6

    输出

    复制
    2
    解题思路:
    这是一道标准的二分
    AC代码1:
    #pragma GCC optimize(2)
    #include<bits/stdc++.h>
    using namespace std;
    inline int read() {int x=0,f=1;char c=getchar();while(c!='-'&&(c<'0'||c>'9'))c=getchar();if(c=='-')f=-1,c=getchar();while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return f*x;}
    typedef long long ll;
    const int maxn = 1e7+10;
    int a[maxn];    
    int n,m;
    int judge(int x){
        ll t=0;
        for(int i=1;i<=n;i++){
            t+=(a[i]+x-1)/x;//向上取整的意思
        }
        if(t>m)
            return 0;
        else
            return 1; 
    }
    int main()
    {
        cin>>n>>m;
        int l=1e7,r=1;
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        int ans;
        while(l>=r){
            int mid=(l+r)/2;
            if(judge(mid)){
                ans=mid;
                l=mid-1;
            }
            else{
                r=mid+1;
            }
        }
        printf("%d",ans);
        return 0;
    } 
    AC代码2:
    #pragma GCC optimize(2)
    #include<bits/stdc++.h>
    using namespace std;
    inline int read() {int x=0,f=1;char c=getchar();while(c!='-'&&(c<'0'||c>'9'))c=getchar();if(c=='-')f=-1,c=getchar();while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return f*x;}
    typedef long long ll;
    const int maxn = 1e7+10;int a[2002000], n, m;
     
    bool check(int x) {
      long long sum = 0;
      for(int i = 0; i < n; i++) {
        sum += (a[i] + x - 1) / x;
      }
      return sum <= m;
    }
     
    int main() {
      cin >> n >> m;
      for(int i = 0; i < n; i++) {
        cin >> a[i];
      }
      int left = 1, right = 10000000;
      while(left < right) {
        int mid = (left + right) >> 1;
        if(check(mid)) {
          right = mid;
        } else {
          left = mid + 1;
        }
      }
      cout << left << "
    ";
    }
    
    
    

  • 相关阅读:
    导包路径
    django导入环境变量 Please specify Django project root directory
    替换django的user模型,mysql迁移表报错 django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependen cy user.0001_initial on database 'default'.
    解决Chrome调试(debugger)
    check the manual that corresponds to your MySQL server version for the right syntax to use near 'order) values ('徐小波','XuXiaoB','男','1',' at line 1")
    MySQL命令(其三)
    MySQL操作命令(其二)
    MySQL命令(其一)
    [POJ2559]Largest Rectangle in a Histogram (栈)
    [HDU4864]Task (贪心)
  • 原文地址:https://www.cnblogs.com/lipu123/p/12154345.html
Copyright © 2011-2022 走看看