题目链接:
HDU:http://acm.hdu.edu.cn/showproblem.php?pid=4791
ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5072
1 2 3 0 20 100 10 0 99 100
0 1000 1000
HDU代码如下:
#include <cstdio> #include <cstdlib> #include <algorithm> #include <vector> #include <iostream> #define INF 1e18 using namespace std; const int maxn=100017; typedef __int64 LL; LL s[maxn],p[maxn],c[maxn]; int main() { int T; int n, m; LL tt; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i = 0; i < n; i++) { scanf("%I64d%I64d",&s[i],&p[i]); } LL minn = INF; for(int i = n-1; i >= 0; i--) { minn = min(s[i]*p[i],minn); c[i] = minn; } for(int i = 0; i < m; i++) { scanf("%I64d",&tt); if(tt>=s[n-1])//最后 printf("%I64d\n",tt*p[n-1]); else { int pos = upper_bound(s,s+n,tt)-s; LL ans = tt*p[pos-1]; ans = min(ans,c[pos]); printf("%I64d\n",ans); } } } return 0; }
ZJU代码如下:
#include <cstdio> #include <algorithm> #include <iostream> #define INF 1e18 using namespace std; const int maxn = 100017; typedef long long LL; LL s[maxn], p[maxn], c[maxn]; int main() { int T; int n, m; LL tt; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i = 0; i < n; i++) { scanf("%lld%lld",&s[i],&p[i]); } LL minn = INF; for(int i = n-1; i >= 0; i--) { minn = min(s[i]*p[i],minn); c[i] = minn; } for(int i = 0; i < m; i++) { scanf("%lld",&tt); if(tt>=s[n-1])//最后 printf("%lld\n",tt*p[n-1]); else { int pos = upper_bound(s,s+n,tt)-s; LL ans = tt*p[pos-1]; ans = min(ans,c[pos]); printf("%lld\n",ans); } } } return 0; }
HDU 4791 & ZOJ 3726 Alice's Print Service (数学 打表)
原文地址:http://blog.csdn.net/u012860063/article/details/40455549