博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACM 2013 长沙区域赛 Alice's Print Service (二分 思维)
阅读量:2135 次
发布时间:2019-04-30

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

ZOJ - 3726  

题目大意:

      你需要打印纸张,打印店的服务是按张数分档计费的,例如100张以内一张20分,100张以上一张10分;当你需要打印90张时,90*20=1800,此时还不如多打印10张凑成100,这样的花费是100*10=1000。

     现在告诉你打印店的分档计费策略和需要打印的张数,求出最少花费是多少。

题解:

     一道不算很水的签到题,打训练赛的时候一度被它卡了一下。

      先预处理一下,当前档和下一档的最小值比,如果比他大就用下一档(倒着处理,因为有可能隔着好几档都是最小的,如101 10,105 5)

     在找给出的张数属于哪一档时用二分。

#include
#include
using namespace std;#define ll long long#define INF 1e18ll minn[100010];ll s[100010];ll p[100010];int main(){ //freopen("input.txt","r",stdin); int T,n,m; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) scanf("%lld%lld",&s[i],&p[i]); minn[n]=s[n]*p[n]; for(int i=n-1;i>=1;--i) minn[i]=min(minn[i+1],s[i]*p[i]); ll ans,x; int pos; minn[n+1]=INF; while(m--) { scanf("%lld",&x); pos=lower_bound(s+1,s+n+1,x)-s; ans=min(x*p[pos-1],minn[pos]); printf("%lld\n",ans); } } return 0;}

 

转载地址:http://okfgf.baihongyu.com/

你可能感兴趣的文章
数的范围(二分查找上下界)
查看>>
算法导论阅读顺序
查看>>
Windows程序设计:直线绘制
查看>>
linux之CentOS下文件解压方式
查看>>
Django字段的创建并连接MYSQL
查看>>
div标签布局的使用
查看>>
HTML中表格的使用
查看>>
(模板 重要)Tarjan算法解决LCA问题(PAT 1151 LCA in a Binary Tree)
查看>>
(PAT 1154) Vertex Coloring (图的广度优先遍历)
查看>>
(PAT 1115) Counting Nodes in a BST (二叉查找树-统计指定层元素个数)
查看>>
(PAT 1143) Lowest Common Ancestor (二叉查找树的LCA)
查看>>
(PAT 1061) Dating (字符串处理)
查看>>
(PAT 1118) Birds in Forest (并查集)
查看>>
数据结构 拓扑排序
查看>>
(PAT 1040) Longest Symmetric String (DP-最长回文子串)
查看>>
(PAT 1145) Hashing - Average Search Time (哈希表冲突处理)
查看>>
(1129) Recommendation System 排序
查看>>
PAT1090 Highest Price in Supply Chain 树DFS
查看>>
(PAT 1096) Consecutive Factors (质因子分解)
查看>>
(PAT 1019) General Palindromic Number (进制转换)
查看>>