欢乐赛#51 T6
2025-07-09 10:03:30
发布于:北京
13阅读
0回复
0点赞
不能开双重循环暴力因为会 。
两个数 的结果一致,它们的差才是 的倍数,所以我们可以找到 为 的最大最小值, 为 的最大最小值, 为 的最大最小值,分别相减取最大值(时间复杂度 )。
#include <bits/stdc++.h>
using namespace std;
int n,mx1,mn1=1005,mx2,mn2=1005,mx0,mn0=1005;
int a[100005];
int main(){
cin>>n;
for (int i=1;i<=n;i++){
cin>>a[i];
if (a[i]%3==1){
if (a[i]>mx1) mx1=a[i];
if (a[i]<mn1) mn1=a[i];
}
if (a[i]%3==2){
if (a[i]>mx2) mx2=a[i];
if (a[i]<mn2) mn2=a[i];
}
if (a[i]%3==0){
if (a[i]>mx0) mx0=a[i];
if (a[i]<mn0) mn0=a[i];
}
}
cout<<max(max(mx1-mn1,mx2-mn2),mx0-mn0);
return 0;
}
这里空空如也
有帮助,赞一个