//
#include<bits/stdc++.h>
using namespace std;
const int N=1111;
int in[N*N];
int main()
{
int n,k,i,j,ans,re,tt,t1,t2;
while( cin>>n>>k )
{
for( i=0;i<n;i++ ) cin>>in[i];
sort( in,in+n );
stack<int> sk[N];
for( i=0;i<n;i++ ) sk[ in[i]%k ].push( in[i] );
ans=0;
for( i=0;i<k;i++ )
{
if( sk[i].empty() ) continue;
for( j=i;j<k;j++ )
{
if( sk[j].empty() ) continue;
re=( k-i+k-j )%k;
if( re<j || sk[re].empty() ) continue; // 之前的遍历过
// tt=sk[i].top()+sk[j].top()+sk[re].top();
// i==j==re
tt=0;
if( !sk[i].empty() )
{
t1=sk[i].top(); sk[i].pop(); tt+=t1;
if( !sk[j].empty() )
{
t2=sk[j].top(); sk[j].pop(); tt+=t2;
if( !sk[re].empty() )
{
tt+=sk[re].top();
ans=max( ans,tt );
}
sk[j].push( t2 );
}
sk[i].push( t1 );
}
}
}
cout<<ans<<endl;
}
return 0;
}
蓝桥杯_倍数问题_stack_求余
猜你喜欢
转载自blog.csdn.net/qq_63173957/article/details/125166839
今日推荐
周排行