• sgu Ice-cream Tycoon


    题意:供应商提供n块价格为c的冰淇淋,一个学生想买n块冰淇淋,手中的钱数总共有t元,为了不让买n块冰淇淋所花费的钱数不超过t元,先尽可能卖给这个学生便宜的冰淇淋。

    如果这个学生不能买到所需要的冰淇淋则输出“UNHAPPY”,能则输出“HAPPY”。

      1 #include <cstdio>
      2 #include <cstring>
      3 #include <algorithm>
      4 #define maxn 200000
      5 using namespace std;
      6 
      7 long long x[maxn];
      8 struct node1
      9 {
     10     char str[100];
     11     int n;
     12     long long w;
     13 }p[maxn];
     14 struct node
     15 {
     16     int l,r;
     17     long long num;
     18     long long sum;
     19     int flag;
     20 }tree[maxn*4];
     21 
     22 void up(int i)
     23 {
     24     if(tree[i].l==tree[i].r) return ;
     25     tree[i].sum=tree[i<<1].sum+tree[i<<1|1].sum;
     26     tree[i].num=tree[i<<1].num+tree[i<<1|1].num;
     27 }
     28 void down(int i)
     29 {
     30     if(tree[i].l==tree[i].r) return ;
     31     if(tree[i].flag!=-1)
     32     {
     33         tree[i<<1].sum=tree[i<<1|1].sum=0;
     34         tree[i<<1].num=tree[i<<1|1].num=0;
     35         tree[i<<1].flag=tree[i<<1|1].flag=0;
     36         tree[i].flag=-1;
     37     }
     38 }
     39 
     40 void build(int i,int l,int r)
     41 {
     42     tree[i].l=l; tree[i].r=r;
     43     tree[i].num=tree[i].sum=0;
     44     tree[i].flag=-1;
     45     if(l==r) return ;
     46     int mid=(l+r)>>1;
     47     build(i<<1,l,mid);
     48     build(i<<1|1,mid+1,r);
     49 }
     50 
     51 void deal(int i,int n,int c)
     52 {
     53     tree[i].sum+=(long long)c*n;
     54     tree[i].num+=n;
     55     if(x[tree[i].l]==c&&x[tree[i].r]==c) return ;
     56     down(i);
     57     if(c<=x[tree[i<<1].r]) deal(i<<1,n,c);
     58     else deal(i<<1|1,n,c);
     59 }
     60 
     61 long long search1(int i,int n)
     62 {
     63     if(tree[i].l==tree[i].r)
     64     {
     65         return (long long)n*x[tree[i].l];
     66     }
     67     down(i);
     68     if(tree[i<<1].num>=n)  return search1(i<<1,n);
     69     else
     70         return tree[i<<1].sum+search1(i<<1|1,n-tree[i<<1].num);
     71 }
     72 
     73 void change(int i,int n)
     74 {
     75     if(tree[i].l==tree[i].r)
     76     {
     77         tree[i].num-=n;
     78         tree[i].sum=tree[i].num*x[tree[i].l];
     79         return ;
     80     }
     81     down(i);
     82     if(tree[i<<1].num>=n)
     83     {
     84         change(i<<1,n);
     85     }
     86     else
     87     {
     88         change(i<<1|1,n-tree[i<<1].num);
     89         tree[i<<1].num=0;
     90         tree[i<<1].sum=0;
     91         tree[i<<1].flag=0;
     92     }
     93     up(i);
     94 }
     95 int main()
     96 {
     97     int cnt=0,t1=0;
     98     while(scanf("%s %d%I64d",p[cnt].str,&p[cnt].n,&p[cnt].w)==3)
     99     {
    100         if(p[cnt].str[0]=='A')
    101         {
    102             x[t1++]=p[cnt].w;
    103         }
    104         cnt++;
    105     }
    106     sort(x,x+t1);
    107     t1=unique(x,x+t1)-x;
    108     build(1,0,t1-1);
    109     for(int i=0; i<cnt; i++)
    110     {
    111         if(p[i].str[0]=='A')
    112         {
    113             deal(1,p[i].n,p[i].w);
    114         }
    115         else
    116         {
    117             if(tree[1].num<p[i].n) printf("UNHAPPY
    ");
    118             else
    119             {
    120                 if(search1(1,p[i].n)>p[i].w) printf("UNHAPPY
    ");
    121                 else
    122                 {
    123                     printf("HAPPY
    ");
    124                     change(1,p[i].n);
    125                 }
    126             }
    127         }
    128     }
    129     return 0;
    130 }
    View Code
  • 相关阅读:
    PE格式详细讲解2 系统篇02|解密系列
    结构体与共用体06 零基础入门学习C语言58
    PE格式详细讲解3 系统篇03|解密系列
    我的学习路
    结构体与共用体07 零基础入门学习C语言59
    PE格式详细讲解2 系统篇02|解密系列
    PE格式详细讲解3 系统篇03|解密系列
    Windows Azure 社区新闻综述(#61 版)
    Django 现可在 Windows Azure 上使用
    Windows Azure Active Directory正式发布:已提供了超过 2650 亿个身份验证和服务了290万个组织!
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3901190.html
Copyright © 2020-2023  润新知