B. Minimum Product
题意
给出 a , b , x , y a,b,x,y a,b,x,y
a a a任意时候大于等于 x x x, b b b任意时候大于等于 y y y
n n n次把 a a a或 y y y减1的机会,问能构造的 a ∗ b a*b a∗b最小值
通 过 在 纸 上 画 几 个 数 据 会 发 现 通过在纸上画几个数据会发现 通过在纸上画几个数据会发现
让 x ∗ y 的 乘 积 最 小 , 假 设 x > y 让x*y的乘积最小,假设x>y 让x∗y的乘积最小,假设x>y
让 x 减 小 1 只 能 使 x ∗ y 减 小 y 让x减小1只能使x*y减小y 让x减小1只能使x∗y减小y
让 y 减 小 1 却 能 使 x ∗ y 减 小 x ! ! 让y减小1却能使x*y减小x!! 让y减小1却能使x∗y减小x!!
所以贪心策略是,使小的数字尽可能小
所 以 a 能 到 的 最 小 值 是 m a x ( x , a − n ) 所以a能到的最小值是max(x,a-n) 所以a能到的最小值是max(x,a−n)
b 能 到 的 最 小 值 是 m a x ( y , b − n ) b能到的最小值是max(y,b-n) b能到的最小值是max(y,b−n)
比 较 一 下 , 那 个 小 就 优 先 对 谁 操 作 , 剩 下 就 对 另 一 个 数 操 作 比较一下,那个小就优先对谁操作,剩下就对另一个数操作 比较一下,那个小就优先对谁操作,剩下就对另一个数操作
这 样 一 定 是 最 优 的 这样一定是最优的 这样一定是最优的
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a,b,x,y;
signed main()
{
int t,n; cin >> t;
while( t-- )
{
cin >> a >> b >> x >> y >> n;
int q=max( x,a-n ),w=max( y,b-n );
if( w<=q ) swap(a,b),swap(x,y);
int minn=min( n,a-x );
n-=minn,a-=minn;
minn=min( n,b-y);
b-=minn;
cout << a*b << endl;
}
}