解题思路:
优化枚举
(a+b+c)%k =(a%k+b%k+c%k)%k=0
参考代码:
#include<stdio.h>
int list[1005][3];
int main()
{
//(a+b+c)%k = (a%k+b%k+c%k)%k
int n,k;
int num;
scanf("%d %d",&n,&k);
while(n--)
{
scanf("%d",&num);
if(num >= list[num%k][0])
{
list[num%k][2] = list[num%k][1];
list[num%k][1] = list[num%k][0];
list[num%k][0] = num;
}
else if(num < list[num%k][0] && num > list[num%k][1])
{
list[num%k][2] = list[num%k][1];
list[num%k][1] = num;
}
else if(num < list[num%k][1] && num > list[num%k][2])
{
list[num%k][2] = num;
}
}
int max = 0x80000000;
int v1,v2,v3;
int i,j;
for(i=0;i<=k;i++)
{
for(j=i;j<=k;j++)
{
int t = (k-i+k-j)%k;
v1 = list[i][0];
if(i == j)
{
v2 = list[i][1];
if(t == i)
v3 = list[i][2];
else
v3 = list[t][0];
}
else
{
v2 = list[j][0];
if(t == i)
v3 = list[i][1];
else if(t == j)
v3 = list[j][1];
else
v3 = list[t][0];
}
if(v1+v2+v3 > max)
max = v1+v2+v3;
}
}
printf("%d",max);
}
0.0分
1 人评分