博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sgu Ice-cream Tycoon
阅读量:5210 次
发布时间:2019-06-14

本文共 2873 字,大约阅读时间需要 9 分钟。

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

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

1 #include 
2 #include
3 #include
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
p[i].w) printf("UNHAPPY\n");121 else122 {123 printf("HAPPY\n");124 change(1,p[i].n);125 }126 }127 }128 }129 return 0;130 }
View Code

 

转载于:https://www.cnblogs.com/fanminghui/p/3901190.html

你可能感兴趣的文章
Hive入门之UDFS函数
查看>>
python文件操作笔记
查看>>
泛型委托
查看>>
笔试题拾遗
查看>>
与虚拟机Oracle连接出现ora-12154问题的解决
查看>>
JavaScript对象(一)
查看>>
Sublime View In Browser
查看>>
linux下可执行程序如何定位共享库文件以及如何让系统找到用户指定的库
查看>>
FPGA机器学习之机器学习的n中算法总结1
查看>>
Bootstrap的js插件之轮播(carousel)
查看>>
linux自旋锁
查看>>
路冉的JavaScript学习笔记-2015年1月23日
查看>>
IPTABLES详解
查看>>
Linux 下tomcat 的重新启动
查看>>
利用node js 来创建一个服务器
查看>>
objectiveC【语法】修饰符 static extern const
查看>>
史上最全的maven pom.xml文件教程详解
查看>>
ubuntu装软件包
查看>>
Mysql出现(10061)错误提示的暴力解决办法
查看>>
2018-2019-2 网络对抗技术 20165202 Exp3 免杀原理与实践
查看>>