• cf D. Renting Bikes


    http://codeforces.com/contest/363/problem/D

    先对b和p排序,用二分求出可以租的车子的最大辆数,其中用mid以后的个人钱数去租前mid的价钱的车子。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #define LL __int64
     5 #define N 200000
     6 using namespace std;
     7 int n,m;
     8 LL a;
     9 LL p[N],b[N];
    10 int max1;
    11 
    12 bool ok(int mid)
    13 {
    14     LL sum=0;
    15     for(int i=0; i<mid; i++)
    16     {
    17         if(b[n-mid+i]>=p[i]) continue;
    18         else if(p[i]>b[n-mid+i])
    19         {
    20             sum+=(p[i]-b[n-mid+i]);
    21         }
    22     }
    23     if(sum>a) return false;
    24     return true;
    25 }
    26 
    27 int main()
    28 {
    29    while(scanf("%d%d%I64d",&n,&m,&a)!=EOF)
    30    {
    31        for(int i=0; i<n; i++)
    32        {
    33            scanf("%I64d",&b[i]);
    34        }
    35        for(int i=0; i<m; i++)
    36        {
    37            scanf("%I64d",&p[i]);
    38        }
    39        sort(p,p+m);
    40        sort(b,b+n);
    41        int l=0,r=min(n,m);
    42        max1=0;
    43        while(l<=r)
    44        {
    45            int mid=(l+r)>>1;
    46            if(ok(mid))
    47            {
    48                l=mid+1;
    49                max1=max(max1,mid);
    50            }
    51            else
    52            {
    53                r=mid-1;
    54            }
    55        }
    56        if(max1==0)
    57        {
    58            printf("0 0
    ");
    59            continue;
    60        }
    61        else
    62        {
    63            LL ans=0;
    64            for(int i=0; i<max1; i++)
    65            {
    66                ans+=p[i];
    67            }
    68            if(a>=ans)
    69            {
    70                printf("%d %d
    ",max1,0);
    71            }
    72            else
    73            {
    74                printf("%d %I64d
    ",max1,ans-a);
    75            }
    76        }
    77    }
    78    return 0;
    79 }
    View Code
  • 相关阅读:
    三、Oracle 查询+where条件
    二、Oracle 数据库基本操作
    一、Oracle 安装
    18.JAVA经典编程题(50题及答案)
    17.网络编程
    16.xml
    Js模块化开发--seajs和gruntJs
    git命令行指南
    nodejs学习笔记---1
    面向对象及组件开发---笔记1
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3945863.html
Copyright © 2020-2023  润新知