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;
}

猜你喜欢

转载自blog.csdn.net/qq_40240576/article/details/83064279
ZOJ