求助(最小乘积)
  • 板块学术版
  • 楼主lego123_forever
  • 当前回复1
  • 已保存回复1
  • 发布时间2020/10/4 10:02
  • 上次更新2023/11/5 12:05:19
查看原帖
求助(最小乘积)
228943
lego123_forever楼主2020/10/4 10:02

最小乘积

描述

给定4个整数:a,b,x,y。刚开始a>=x,b>=y。你可以做如下操作不超过n次:

每次你可以选择a或者b,然后让它的值减少1;不过你要保证本次操作之后a的值不能小于x且b的值不能小于y。

问最多n次操作之后,a*b的最小值是多少?

输入 (读取文件: d.in)

多组测试数据。

第一行,一个整数T,表示有T组测试数据。1<=T<=20000。

接下来有T行,每行5个整数:a,b,x,y,n。1<=a,b,x,y,n<=10^9。

输出 (写入文件: d.out)

共T行,每行一个整数。


输入样例:
7
10 10 8 5 3
12 8 8 7 2
12343 43 4543 39 123212
1000000000 1000000000 1 1 1
1000000000 1000000000 1 1 1000000000
10 11 2 1 5
10 11 9 1 10
输出样例:
70
77
177177
999999999000000000
999999999
55
10

我的代码:

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
        freopen("d.in","r",stdin);
  	freopen("d.out","w",stdout);
	int T;
	long long min1[2010];
	scanf("%d",&T);
	for(int in=0;in<T;in++){
		long long a,b,x,y,n,m1,m2,a2,b2,n2;
		scanf("%d%d%d%d%d",&a,&b,&x,&y,&n);
		n2=n;
		if(a-x<n){
			n=n-(a-x);
			a2=x;
			if(b-y<n){
				b2=y;
			}else{
				b2=b-n;
			}
		} 
		else{
			a2=a-n;
			b2=b;
		}
		m1=a2*b2;
		n=n2;
		a2=0;b2=0;
		if(b-y<n){
			n=n-(b-y);
			b2=y;
			if(a-x<n){
				a2=x;
			}else{
				a2=a-n;
			}
		} 
		else{
			b2=b-n;
			a2=a;
		}
		m2=a2*b2;
		if(m1<m2)
		min1[in]=m1;
		else
		min1[in]=m2;
		//printf("%ld",min(m1,m2));
	}
	for(int in=0;in<T;in++)printf("%ld\n",min1[in]);
	return 0;
}

但只通过了80%的数据。。

2020/10/4 10:02
加载中...