HDU 4122 Alice's mooncake shop (RMQ)
Alice's mooncake shop
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2596 Accepted Submission(s): 619
The traditional food of this festival is the mooncake. Chinese family members and friends will gather to admire the bright mid-autumn harvest moon, and eat mooncakes under the moon together. In Chinese, “round”(圆) also means something like “faultless” or “reuion”, so the roundest moon, and the round mooncakes make the Zhongqiu Festival a day of family reunion.
Alice has opened up a 24-hour mooncake shop. She always gets a lot of orders. Only when the time is K o’clock sharp( K = 0,1,2 …. 23) she can make mooncakes, and We assume that making cakes takes no time. Due to the fluctuation of the price of the ingredients, the cost of a mooncake varies from hour to hour. She can make mooncakes when the order comes,or she can make mooncakes earlier than needed and store them in a fridge. The cost to store a mooncake for an hour is S and the storage life of a mooncake is T hours. She now asks you for help to work out a plan to minimize the cost to fulfill the orders.
For each test case:
The first line includes two integers N and M. N is the total number of orders. M is the number of hours the shop opens.
The next N lines describe all the orders. Each line is in the following format:
month date year H R
It means that on a certain date, a customer orders R mooncakes at H o’clock. “month” is in the format of abbreviation, so it could be "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov" or "Dec". H and R are all integers.
All the orders are sorted by the time in increasing order.
The next line contains T and S meaning that the storage life of a mooncake is T hours and the cost to store a mooncake for an hour is S.
Finally, M lines follow. Among those M lines, the ith line( i starts from 1) contains a integer indicating the cost to make a mooncake during the ith hour . The cost is no more than 10000. Jan 1st 2000 0 o'clock belongs to the 1st hour, Jan 1st 2000 1 o'clock belongs to the 2nd hour, …… and so on.
(0<N <= 2500; 0 < M,T <=100000; 0<=S <= 200; R<=10000 ; 0<=H<24)
The input ends with N = 0 and M = 0.
Jan 1 2000 9 10
5 2
20
20
20
10
10
8
7
9
5
10
0 0
“Jan 1 2000 9 10” means in Jan 1st 2000 at 9 o'clock , there's a consumer ordering 10 mooncakes.
Maybe you should use 64-bit signed integers. The answer will fit into a 64-bit signed integer.
只需要静态查询最小值就可以了。
有一些细节要处理。
- /* ***********************************************
- Author :kuangbin
- Created Time :2013-11-8 9:59:19
- File Name :E:\2013ACM\专题强化训练\区域赛\2011福州\B.cpp
- ************************************************ */
- #include <stdio.h>
- #include <string.h>
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <queue>
- #include <set>
- #include <map>
- #include <string>
- #include <math.h>
- #include <stdlib.h>
- #include <time.h>
- using namespace std;
- int getmonth(char s[])
- {
- if(strcmp(s,"Jan") == ) return ;
- if(strcmp(s,"Feb") == ) return ;
- if(strcmp(s,"Mar") == ) return ;
- if(strcmp(s,"Apr") == ) return ;
- if(strcmp(s,"May") == ) return ;
- if(strcmp(s,"Jun") == ) return ;
- if(strcmp(s,"Jul") == ) return ;
- if(strcmp(s,"Aug") == ) return ;
- if(strcmp(s,"Sep") == ) return ;
- if(strcmp(s,"Oct") == ) return ;
- if(strcmp(s,"Nov") == ) return ;
- if(strcmp(s,"Dec") == ) return ;
- }
- int days[] = {,,,,,,,,,,,,};
- bool isleap(int y)
- {
- if(y % == || (y % != && y% == ))return true;
- else return false;
- }
- struct Node
- {
- char mon[];
- int d,y,h;
- int R;
- int index;
- void input()
- {
- scanf("%s%d%d%d%d",mon,&d,&y,&h,&R);
- if(y < )
- {
- index = -;
- return;
- }
- index = ;
- for(int i = ;i < y;i++)
- {
- if(isleap(i)) index += *;
- else index += *;
- }
- for(int i = ;i < getmonth(mon);i++)
- index += days[i]*;
- if(isleap(y) && getmonth(mon) > )index += ;
- index += (d-)*;
- index += h+;
- }
- };
- const int MAXN = ;
- long long dp[MAXN][];
- long long b[MAXN];
- int mm[MAXN];
- void initRMQ(int n)
- {
- mm[] = -;
- for(int i = ;i <= n;i++)
- {
- mm[i] = ((i&(i-)) == )?mm[i-]+:mm[i-];
- dp[i][] = b[i];
- }
- for(int j = ;j <= mm[n];j++)
- for(int i = ;i + (<<j) - <= n;i++)
- dp[i][j] = min(dp[i][j-],dp[i+(<<(j-))][j-]);
- }
- long long rmq(int x,int y)
- {
- int k = mm[y-x+];
- return min(dp[x][k],dp[y - (<<k) + ][k]);
- }
- Node node[];
- int main()
- {
- //freopen("in.txt","r",stdin);
- //freopen("out.txt","w",stdout);
- int n,m;
- int T,S;
- while(scanf("%d%d",&n,&m) == )
- {
- if(n == && m == )break;
- for(int i = ;i < n;i++)
- node[i].input();
- scanf("%d%d",&T,&S);
- for(int i = ;i <= m;i++)
- {
- scanf("%I64d",&b[i]);
- b[i] += (m-i)*S;
- }
- initRMQ(m);
- long long ans = ;
- for(int i = ;i < n;i++)
- {
- if(node[i].index < || node[i].index > m)continue;
- long long tmp = rmq(max(,node[i].index - T),node[i].index);
- tmp -= (m - node[i].index)*S;
- ans += tmp * node[i].R;
- }
- cout<<ans<<endl;
- }
- return ;
- }
HDU 4122 Alice's mooncake shop (RMQ)的更多相关文章
- HDU 4122 Alice's mooncake shop (单调队列/线段树)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4122 题意:好难读懂,读懂了也好难描述,亲们就自己凑合看看题意把 题解:开始计算每个日期到2000/1/ ...
- hdu 4122 Alice's mooncake shop(单调队列)
题目链接:hdu 4122 Alice's mooncake shop 题意: 有n个订单和可以在m小时内制作月饼 接下来是n个订单的信息:需要在mon月,d日,year年,h小时交付订单r个月饼 接 ...
- HDU 4122 Alice's mooncake shop 单调队列优化dp
Alice's mooncake shop Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem ...
- HDU 4122 Alice's mooncake shop --RMQ
题意: 一个月饼店做月饼,总营业时间m小时,只能在整点做月饼,可以做无限个,不过在不同的时间做月饼的话每个月饼的花费是不一样的,假设即为cost[i],再给n个订单,即为在某个时间要多少个月饼,时间从 ...
- HDU 4122 Alice's mooncake shop
单调队列,裸的!!坑死了,说好的“All the orders are sorted by the time in increasing order. 呢,我就当成严格上升的序列了,于是就各种错.测试 ...
- 【HDOJ】4122 Alice's mooncake shop
RMQ的基础题目,简单题. /* 4122 */ #include <iostream> #include <sstream> #include <string> ...
- HDU 3183:A Magic Lamp(RMQ)
http://acm.hdu.edu.cn/showproblem.php?pid=3183 题意:给出一个数,可以删除掉其中m个字符,要使得最后的数字最小,输出最后的数字(忽略前导零). 思路:设数 ...
- HDU 4884 TIANKENG’s rice shop (模拟)
TIANKENG's rice shop 题目链接: http://acm.hust.edu.cn/vjudge/contest/123316#problem/J Description TIANKE ...
- HDU 1024 Max Sum Plus Plus (动态规划)
HDU 1024 Max Sum Plus Plus (动态规划) Description Now I think you have got an AC in Ignatius.L's "M ...
随机推荐
- CSS-3 RGBA的使用
由于IE-8及以下都不支持 RGBA(),所以往往大家都不用这个属性,而是用图层叠加的方式去实现我们想要的效果.因为 opacity 这个属性是会影响到子孙元素的. 例如: <div class ...
- 20155224 2016-2017-2 《Java程序设计》第6周学习总结
20155224 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 Thread线程: 定义某线程后,要有 xxx.stard(); Thread.sleep( ...
- rpmbuild 构建rpm包时报错解决 error: Installed (but unpackaged) file(s) found:
解决的办法是找到 /usr/lib/rpm/macros 中%__check_files /usr/lib/rpm/check-files %{buildroot} 注释掉
- 对linux内核中jiffies+Hz表示一秒钟的理解
jiffies在内核中是一个全局变量,它用来统计系统启动以来系统中产生的总节拍数,这个变量定义在include/linux/jiffies.h中,定义形式如下. unsigned long volat ...
- C++的那些事 1
最近在看c++的一些库文件,里面的一些比较陌生但看起来挺有用的一些东西,在此记下,以免日后看到再翻找资料. template <size_t _Nb> 这是在看bitset的时候看到的,之 ...
- Pandas DataFrame数据的增、删、改、查
Pandas DataFrame数据的增.删.改.查 https://blog.csdn.net/zhangchuang601/article/details/79583551 #删除列 df_2 = ...
- 360加固保的dex脱壳方法
完全测试了看雪论坛的方法,发现并没有脱壳,依然无法反编译 http://bbs.pediy.com/thread-213377.htm 使用上面方法的结果是会得到16个dex文件,只有一个是与程序相关 ...
- window10 显示QQ图标
- ****CI和UEditor集成
百度UEditor是一款比较常用编辑器 下载地址: http://ueditor.baidu.com/website/download.html 1.在assets目录下建立ueditor文件夹,把下 ...
- Orchard学习 01、orchard日志
一.日志模块类图 1.ILogger接口及实现 2.ILoggerFactory接口及实现 3.其他 二.NullLogger类型 NullLogger类型是实现ILogger接口的空类型.它 ...