【每日一题】12月28日 Topforces Strikes Back
Topforces Strikes Back
https://ac.nowcoder.com/acm/problem/113786
枚举第一个数为x
去除x的所有倍数
找到最大的数z
去除z的所有约数
找到最大的y
答案为max(x+y+z)
代码如下:
#include<bits/stdc++.h> #define ll long long #define pa pair<int,int> using namespace std; const int maxn=2e5+10; const ll mod=1e9+7; int num[maxn],cnt,fa[maxn],ans; set<int>se; int main() { int T; scanf("%d",&T); while(T--) { int n,ans=0; cnt=0; scanf("%d",&n); for(int i=1;i<=n;i++) { int x; scanf("%d",&x); se.insert(x); } for(auto i:se) num[++cnt]=i; se.clear(); for(int i=cnt;i>=1;i--) { ans=max(ans,num[i]); for(int j=cnt;j>i;j--) if(num[j]%num[i]!=0) { ans=max(ans,num[i]+num[j]); for(int k=j-1;k>i;k--) if(num[j]%num[k]!=0&&num[k]%num[i]!=0) { ans=max(ans,num[i]+num[j]+num[k]); break; } break; } } printf("%d\n",ans); } return 0; }