zoukankan      html  css  js  c++  java
  • BZOJ[3847] 宅男计划

     1 #include <map>
     2 #include <cmath>
     3 #include <vector>
     4 #include <cstdio>
     5 #include <cstdlib>
     6 #include <cstring>
     7 #include <iostream>
     8 #include <algorithm>
     9 # define maxn 300
    10 using namespace std;
    11 typedef long long LL;
    12 LL m,F;
    13 int n;
    14 struct Food{
    15     LL tim,p;
    16 }g[maxn];
    17 bool cmp(const Food a,const Food b){
    18     if(a.tim==b.tim) return a.p>b.p;
    19     return a.tim<b.tim;
    20 }
    21 Food q[maxn];
    22 int head,tail;
    23 void init(){
    24     scanf("%lld%lld%d",&m,&F,&n);
    25     for(int i=1;i<=n;i++) scanf("%lld%lld",&g[i].p,&g[i].tim);
    26     sort(g+1,g+n+1,cmp);
    27     head=tail=1;
    28     for(int i=1;i<=n;i++){
    29         while(head<tail && g[i].p<q[tail-1].p) tail--;
    30         q[tail++]=g[i];
    31     }
    32     for(int i=1;i<tail;i++) g[i]=q[i];
    33     n=tail-1;
    34 }
    35 LL check(LL x){
    36     LL rm=m-F*x, mt=0, ret=0;
    37     LL tmp;
    38     for(int i=1;i<=n;i++){
    39         if(mt<=g[i].tim){
    40             tmp=g[i].tim-mt+1;
    41             tmp=min(tmp,rm/(g[i].p*x));
    42             ret+=tmp*x;
    43             rm-=g[i].p*tmp*x;
    44             mt+=tmp;
    45         }
    46         if(mt<=g[i].tim){
    47             tmp=min(x,rm/g[i].p);
    48             ret+=tmp;
    49             rm-=tmp*g[i].p;
    50             mt++;
    51         }
    52     }
    53     return ret;
    54 }
    55 void work(){
    56     LL l=1,r=m/(g[1].p+F),mid1,mid2,ans=0,v1,v2;
    57     while(l<=r){
    58         mid1=l+(r-l)/3,mid2=r-(r-l)/3;
    59         v1=check(mid1); v2=check(mid2);
    60         if(v1<v2) ans=max(ans,v2),l=mid1+1;
    61         else if(v1>v2) ans=max(ans,v1),r=mid2-1;
    62         else ans=max(ans,v1),l=mid1+1,r=mid2-1;
    63     }
    64     cout<<ans<<endl;
    65 }
    66 int main(){
    67     // freopen("a.in","r",stdin);
    68     init();
    69     work();
    70 }
  • 相关阅读:
    BZOJ1409 : Password
    BZOJ2862 : 分糖果
    BZOJ2093 : [Poi2010]Frog
    BZOJ2506 : calc
    BZOJ3290 : Theresa与数据结构
    BZOJ1397 : Ural 1486 Equal squares
    BZOJ2789 : [Poi2012]Letters
    BZOJ3417 : Poi2013 Tales of seafaring
    BZOJ3251 : 树上三角形
    BZOJ3262 : 陌上花开
  • 原文地址:https://www.cnblogs.com/FOXYY/p/7616233.html
Copyright © 2011-2022 走看看