A - Alice's Print Service ZOJ - 3726
题意:给你N张纸去打印,然后打印不同数量的纸张,每一张价格会不同,问最低价格。
题解:先预处理一下,求打印每个价格区间打印最低纸张需要的钱,例如:打印100张10元,结果打印10张要100元,如果你要打印10张纸,自然要打印100张最省钱。
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
#define LL long long
const LL inf = 1e18;
LL s[100005],q;
LL p[100005];
LL ss[100005];
int main()
{
int T;
scanf("%d",&T);
LL sum;
while(T--)
{
LL n,m;
sum = 0;
scanf("%lld%lld",&n,&m);
for(int i = 0 ; i < n ; i++)
scanf("%lld%lld",&s[i],&p[i]);
LL mif =inf;
for(int i = n-1 ; i >= 0 ; i--)
{
mif = min(mif,s[i]*p[i]);
ss[i] = mif;
}
for(int i = 0 ; i < m ; i++)
{
scanf("%lld",&q);
if(q>=s[n-1])
printf("%lld\n",q*p[n-1]);
else
{
int k = upper_bound(s,s+n,q)-s;
LL sum3,sum2;
sum2 = q*p[k-1];
LL t = min(sum2,ss[k]);
printf("%lld\n",t);
}
}
}
return 0;
}