#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<vector>
#define mp make_pair
#define fr first
#define sc second
using namespace std;
const int N=100005;
int n,ans,m,l,r,len,cnt,s,now,lft;
int a[N],b[N];
vector<int> lev[N];
int main(){
int i,j;
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+1+n);
for (i=1;i<=n;i++) lev[a[i]%m].push_back(a[i]);
if (m%2==0) ans+=lev[m/2].size()/2;
ans+=lev[0].size()/2;
for (i=1;i<=m/2;i++){
if (m%2==0&&i==m/2) break;
if (lev[i].size()<lev[m-i].size()) swap(lev[i],lev[m-i]);
ans+=lev[m-i].size();
len=lev[i].size()-1; cnt=0;
for (l=0;l<=len;l=r+1){
for (r=l;r<len&&lev[i][l]==lev[i][r+1];r++);
b[++cnt]=r-l+1;
}
sort(b+1,b+1+cnt); lft=len+1-lev[m-i].size();
for (j=cnt;j;j--){
if (lft<=1) break;
now=min(lft,b[j]);
lft-=now/2*2; ans+=now/2;
}
}
printf("%d\n",ans);
return 0;
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:21:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d",&n,&m);
^
./Main.cpp:22:38: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
for (i=1;i<=n;i++) scanf("%d",&a[i]);
^