1. 程式人生 > >hdu4791-Alice's Print Service

hdu4791-Alice's Print Service

數字 scan con continue com code bound namespace blank

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=4791

技術分享圖片技術分享圖片

題目解釋:給你一組數據s1,p1,s2,p2...sn,pn,一個數字q,問你當要打印q張資料時,最少花費是多少?值得註意的是p1>p2>p3>...>pn,就是因為看清這個條件,走了很多彎路。

代碼:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;

const
int N = 1e5 + 5; long long s[N],p[N],ps[N],minn[N],q; int main() { 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]); ps[i] = s[i]*p[i]; } minn[n
+1] = 1ll<<50;//就是因為這 for(int i = n;i >= 1;i--) minn[i] = min(ps[i],minn[i+1]); long long sum; for(int i = 1;i <= m;i++) { scanf("%lld",&q); int pos = lower_bound(s+1,s+n+1,q) - s;//返回大於或等於val的第一個元素位置 if
(pos == 1) { printf("0\n"); continue; } if(s[pos] == q) sum = min(q*p[pos],minn[pos]); else sum = min(q*p[pos-1],minn[pos]); printf("%lld\n",sum); } } return 0; }

hdu4791-Alice's Print Service