• Codeforces 734C Anton and Making Potions(枚举+二分)


    题目链接:http://codeforces.com/problemset/problem/734/C

    题目大意:要制作n个药,初始制作一个药的时间为x,魔力值为s,有两类咒语,
    第一类周瑜有m种,每种咒语使制作一个药的时间变成a[i],花费b[i]的魔力,
    第二类咒语有k种,每种咒语瞬间产生c[i]个药,花费d[i]的魔力,c[i]和d[i]都是不递减的,
    求最短时间内产生n个药的时间。
    解题思路:
    因为c[i]和d[i]都是不降的,所以可以枚举a[i],然后二分查找花费小于t-b[i]的第二类咒语。
    注意这里要用upper_bound()而不能用lower_bound(),比如
    10 12
    82 82
    前者会找到12,而后者会找到10。

    代码:

     1 #include<bits/stdc++.h>
     2 #define lc(a) (a<<1)
     3 #define rc(a) (a<<1|1)
     4 #define MID(a,b) ((a+b)>>1)
     5 #define fin(name)  freopen(name,"r",stdin)
     6 #define fout(name) freopen(name,"w",stdout)
     7 #define clr(arr,val) memset(arr,val,sizeof(arr))
     8 #define _for(i,start,end) for(int i=start;i<=end;i++)
     9 #define FAST_IO ios::sync_with_stdio(false);cin.tie(0);
    10 using namespace std;
    11 typedef long long LL;
    12 const int N=2e5+5;
    13 const int INF=0x3f3f3f3f;
    14 const double eps=1e-10;
    15 
    16 LL n,m,k,x,s;
    17 LL a[N],b[N],c[N],d[N];
    18 
    19 int main(){
    20     FAST_IO;
    21     cin>>n>>m>>k>>x>>s;
    22     for(int i=1;i<=m;i++){
    23         cin>>a[i];
    24     }
    25     for(int i=1;i<=m;i++){
    26         cin>>b[i];
    27     }
    28     for(int i=1;i<=k;i++){
    29         cin>>c[i];
    30     }
    31     for(int i=1;i<=k;i++){
    32         cin>>d[i];
    33     }
    34     
    35     LL ans=x*n;                //初始化为不用魔法所需时间 
    36     a[0]=x;
    37     
    38     for(int i=0;i<=m;i++){
    39         //魔力值不够 
    40         if(b[i]>s) continue; 
    41         LL t=s-b[i];
    42         int pos=upper_bound(d+1,d+1+k,t)-d;
    43         pos--;
    44         ans=min(ans,a[i]*(n-c[pos]));
    45     }
    46     cout<<ans<<endl;
    47     return 0;
    48 }
  • 相关阅读:
    青城的另一个一夜/情
    SystemProperties.get/set property_get/set
    锁——Java同步的基本思想
    CMUSphinx Learn
    猜数字
    我的音乐我的电影
    动态规划_钢条切割问题
    directdraw显示yuv420(YV12)
    Redis 命令参考
    HDU 3078 LCA转RMQ
  • 原文地址:https://www.cnblogs.com/fu3638/p/9104406.html
Copyright © 2020-2023  润新知