zoukankan      html  css  js  c++  java
  • 【题解】 CF734C Anton and Making Potions

    题意

    要求得到至少 (n) 个药剂,可以使用两种魔法,一种能够缩短制药时间,一种能瞬间制药,

    给你 (x) 表示标准制药一个要 (x) 秒,给你 (s) 表示你的法力值为(s)

    (m) 种第一类魔法,消耗 (b) 点法力值,缩短时间为 (a) 秒。

    (k) 种第二类魔法,消耗 (d) 点法力值,瞬间做出 (c) 个药。

    两种魔法最多各选一个用,问你最少花多少时间能制得至少 (n) 个药剂

    分析:

    1. 首先按第一种药剂以能缩短的时间为第一关键字,以消耗的法力值为第二关键字排序。

    2. 枚举第一种药剂,二分第二种药剂即可。

    Code

    #include <bits/stdc++.h>
    using namespace std;
    
    const int INF= 0x3f3f3f3f;
    const int N=2e5+5;
    typedef long long LL;
    
    LL n,m,k,w,s;
    LL b[N],c[N];
    
    struct Node
    {
    	LL cost;
    	LL changeto;
    } a[N];
    
    int main()
    {
    	scanf("%d%d%d%d%d",&n,&m,&k,&w,&s);
    	for(int i=1; i<=m; i++) scanf("%d",&a[i].cost);
    	for(int i=1; i<=m; i++) scanf("%d",&a[i].changeto);
    	for(int i=1; i<=k; i++) scanf("%d",&b[i]);
    	for(int i=1; i<=k; i++) scanf("%d",&c[i]);
    
    	LL time=n*w;
    	for(int i=1; i<=k; i++)
    	{
    		if(c[i] <= s)
    		{
    			time=min(time, (n-b[i])*w );
    		}
    	}
    	for(int i=1; i<=m; i++)
    	{
    		if(a[i].changeto <= s)
    		{
    			time=min(time, n*a[i].cost );
    		}
    	}
    	for(int i=1; i<=m; i++)
    	{
    		if(a[i].changeto > s) continue;
    
    		LL temp=upper_bound(c+1,c+1+k, s-a[i].changeto )-(c+1);
    		if(c[temp] <= s-a[i].changeto)
    			time=min(time, (n-b[temp])*a[i].cost) ;
    	}
    	
    	cout<<time;
    
    	return 0;
    }
    
  • 相关阅读:
    doubango(5)--SIP协议栈传输层的启动
    doubango(6)--Doubango协议栈中对RTP的管理
    doubango(4)--SIP协议栈传输层的启动
    doubango(3)--协议栈的启动过程
    【Redis发布订阅】
    【Redis哨兵集群】
    【搭建Saltstack运维工具】
    【Docker构建私有仓库】
    【Docker端口映射】
    【Docker自定制镜像之Dockerfile】
  • 原文地址:https://www.cnblogs.com/BorisDimitri/p/15142880.html
Copyright © 2011-2022 走看看