【二分】Haybale Feast

这是一个关于饲料选择的问题,给定每种饲料的风味和辣度值,需要找出连续的一组饲料,使得风味总和大于特定阈值M,并使辣度值最小。通过二分查找和贪心策略,可以确定满足条件的最小辣度值。程序通过读取饲料数据,判断不同辣度值下是否满足风味条件,最终找到最小辣度解。
摘要由CSDN通过智能技术生成

题目来源:牛客

题目大意:

N(N< 1 0 5 10^5 105)种饲料,每种饲料有flavor和spiciness两个参数(各自用一个 1 0 9 10^9 109内的整数表示)

N种饲料编号1~N,从中选出连续的一组饲料(比如[3,7]号饲料),这组饲料总的spiciness值为该组内各个饲料spiciness值的最大值,总的flavor值为该组内各个饲料flavor值的和

现求从N种饲料中取出的连续的一组饲料,在满足flavor值大于M(M< 1 0 18 10^{18} 1018)的前提下,spiciness的最小值为多少

分析:

二分,然后 O ( n ) O(n) O(n)判断解是否满足要求

二分的思路来源:答案的范围为 [ 1 , 1 0 9 ] [1,10^9] [1,109],且若有两个满足要求的解,值小的一定比值大的更优

如何判断解是否满足要求?

遍历一遍数组,利用贪心的思想,若一种饲料spiciness值小于等于x,则我们就将它的flavor值加上(因为目的是得到sum值大于M的区间)

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cmath>
using namespace std;

long long N,M;
long long a[100005],b[100005];

bool check(long long x){
  long long sum=0;
  for(int i=1;i<=(int)N;i++){
      if(b[i]>x){
         sum=0;
         continue;
      }
      sum+=a[i];
      if(sum>=M) return true;
  }
  return false;
}

int main(){
  scanf("%lld%lld",&N,&M);
  for(int i=1;i<=(int)N;i++)
      scanf("%lld%lld",&a[i],&b[i]);
  long long l=1,r=(long long )1e9+1;
  long long ans;
  while(l<=r){
     long long mid=(r-l)/2+l;
     if(check(mid)) ans=mid,r=mid-1;
     else l=mid+1;
  }
  printf("%lld\n",ans);
  return 0;
}

Python的feast是一个用于特征存储和管理的开源库。下面是一个使用feast的示例: 首先,我们需要准备一些特征数据。假设我们正在开发一个电商推荐系统,我们想要使用用户的浏览历史和购买记录作为特征。我们可以定义一个“user_features.csv”文件,其中包含用户的ID、浏览历史和购买记录。类似地,我们可以定义一个“product_features.csv”文件,其中包含产品的ID、价格和品类等特征。 接下来,我们可以使用feast来创建一个特征实体。我们可以使用命令行工具或编程接口,使用以下代码创建一个新的特征实体: ```python import feast # 创建一个feast客户端 client = feast.Client() # 创建一个特征实体 client.apply_entity_from_csv(entity="user", entity_source="user_features.csv", schema="user_id:int64, view_count:int64, purchase_count:int64") client.apply_entity_from_csv(entity="product", entity_source="product_features.csv", schema="product_id:int64, price:double, category:string") ``` 我们定义了两个特征实体,一个是用户(user),一个是产品(product)。通过定义它们的名称、来源和模式,我们可以让feast知道如何加载和管理这些特征。 接下来,我们可以定义一个特征集(FeatureSet)。特征集是一个包含多个特征的集合,可以用来训练模型或进行推断。以下是一个使用feast定义特征集的示例: ```python # 创建一个特征集 client.apply_feature_set(feature_set="user_view_stats", features=["user.view_count", "user.purchase_count", "product.price"], entities=["user", "product"], batch_source="user_features.csv", stream_source="user_clickstream", schema="user_id:int64, view_count:int64, purchase_count:int64, price:double") ``` 在上述示例中,我们定义了一个名为“user_view_stats”的特征集。它包含了用户的浏览次数、购买次数以及产品的价格特征。我们还指定了特征集的实体(即用户和产品),以及特征集的数据来源(批处理和流处理)。 通过以上步骤,我们成功地创建了特征实体和特征集,并使用feast进行特征管理和存储。在实际使用feast时,还可以通过feast的查询接口获取特征数据,并进行模型训练或推断等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值