题意:
给你一个包含n个整数的数组a。允许你对它进行以下操作,次数不限(0次或更多)。选择2个指数i,j,其中1≤i<j≤n,用|ai-aj|替换所有i≤k≤j的ak。打印最终数组中所有元素的最大和,你可以通过这种方式获得。
思路:他可以无限操作次数,所以每次操作后ai的值会变化。
对于n<=3时,当n=1,直接输出,n=2时判断一下两数的差*2和两数之和谁大,而对于n=3时,判断两两相邻作差和3个数的和大小,对于n>3,枚举出最大数然后*n。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
int a[N],s[N];
signed main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
if(n>3){
int maxl=0;
for(int i=1;i<=n;i++){
cin>>a[i];
maxl=max(maxl,a[i]);
}
cout<<maxl*n<<"\n";
}
else {
if(n==1) {
int x;
cin>>x;
cout<<x<<"\n";
}
if(n==2){
int x,y;
cin>>x>>y;
cout<<max(x+y,abs(y-x)*2)<<"\n";
}
if(n==3){
int x,y,z;
cin>>x>>y>>z;
int op=max(max(z,x),max(abs(x-y),abs(y-z)));
cout<<max(op*3,x+y+z)<<"\n";
}
}
}
}