CF1631A Min Max Swap 题解
题意简述
给定数组 和 ,可以交换下标相同的两个元素。让 数组的最大值和 数组的最大值之积最小。
分析
想象一个长方形,它的周长是固定的,那怎么分配长和宽才能让面积尽可能的小呢?
就假设周长是 ,则长宽之和是 ,列下表格:
长 | 宽 | 面积 |
---|---|---|
1 | 8 | 8 |
2 | 7 | 14 |
3 | 6 | 18 |
4 | 5 | 20 |
观察长和宽的差值,分别是 ,而面积不断地增大。
所以我们可以得出结论:
两个数和一定,差越大,积越小。
回到题目,题目要求积要尽可能地小,所以我们让 数组的数尽可能地大, 数组的数尽可能地小,再分别求最大值,就能得出答案了。
代码实现
#include <bits/stdc++.h> using namespace std; int t; int n; int a[105]; int b[105]; int main(){ cin>>t; while(t--){ cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++)cin>>b[i]; int s1=0,s2=0; for(int i=1;i<=n;i++){ if(a[i]<b[i])swap(a[i],b[i]); s1=max(s1,a[i]);s2=max(s2,b[i]); } cout<<s1*s2<<endl; } return 0; }
本文作者:tmjyh09
本文链接:https://www.cnblogs.com/tmjyh09/p/15877342.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步