zoukankan      html  css  js  c++  java
  • 2018湘潭大学程序设计竞赛【E】

    题目链接:https://www.nowcoder.com/acm/contest/105/E

    题意:给你美食种类和查询次数,告诉你美味度和价格,给你固定钱数,问你最多能吃到多少美味度的食物。(X真是对自己的表达能力感到悲伤啊)。

    题解:乍一看其实用线段树是最优解。当时懒得敲板子,不想用线段树。类似于这种找最值的,其实可以用前缀数组维护最大差值。坑点就是啊二分啊。这里的二分就是找最接近的价格,从前缀数组里找到最优美味度的解。

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 #define Max 1000010
     5 int n,m;
     6 int pre[Max];
     7 struct Food{
     8     int d;
     9     int c;
    10 };
    11 Food food[Max];
    12 bool cmp(Food a,Food b){
    13     return a.d<b.d;
    14 }
    15 
    16 int find(int l,int r,int x){
    17     int ans;
    18     while(l <= r){
    19         int mid = (l + r) / 2;
    20         if(food[x].d <= x)
    21             l=mid+1,ans = mid;    
    22         else
    23             r = mid - 1;
    24     }
    25     return ans;
    26     
    27 }
    28 int main(){
    29     int T;
    30     scanf("%d",&T);
    31     while(T--){
    32         scanf("%d%d",&n,&m);        
    33         for(int i = 1 ;i <= n ;i++){
    34             scanf("%d%d",&food[i].d,&food[i].c);
    35         }
    36         sort(food+1,food+n+1,cmp);
    37         
    38         pre[0]=0;
    39         for(int i = 1; i <= n; i++)
    40             pre[i]=max(pre[i-1],food[i].c);
    41         int t;
    42         while(m--){
    43             scanf("%d",&t);
    44             int ans = find(1,n,t);
    45             printf("%d
    ",pre[ans]); 
    46         }
    47     }
    48     
    49     
    50     return 0;
    51 }
    View Code
  • 相关阅读:
    招行面试
    今日头条面试[教育岗]
    四方精创 面试
    ArrayList 源码
    redis缓存,穿透,击穿,雪崩
    hashMap
    集合整理
    阿里CBU技术部一面
    网安面试
    php递归获取顶级父类id
  • 原文地址:https://www.cnblogs.com/Asumi/p/8987729.html
Copyright © 2011-2022 走看看