B. Preparation for International Women's Day
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
International Women's Day is coming soon! Polycarp is preparing for the holiday.
There are nn candy boxes in the shop for sale. The ii-th box contains didi candies.
Polycarp wants to prepare the maximum number of gifts for kk girls. Each gift will consist of exactly two boxes. The girls should be able to share each gift equally, so the total amount of candies in a gift (in a pair of boxes) should be divisible by kk. In other words, two boxes ii and jj (i≠ji≠j) can be combined as a gift if di+djdi+dj is divisible by kk.
How many boxes will Polycarp be able to give? Of course, each box can be a part of no more than one gift. Polycarp cannot use boxes "partially" or redistribute candies between them.
Input
The first line of the input contains two integers nn and kk (1≤n≤2⋅105,1≤k≤1001≤n≤2⋅105,1≤k≤100) — the number the boxes and the number the girls.
The second line of the input contains nn integers d1,d2,…,dnd1,d2,…,dn (1≤di≤1091≤di≤109), where didi is the number of candies in the ii-th box.
Output
Print one integer — the maximum number of the boxes Polycarp can give as gifts.
Examples
input
Copy
7 2
1 2 2 3 2 4 10
output
Copy
6
input
Copy
8 2
1 2 2 3 2 4 6 10
output
Copy
8
input
Copy
7 3
1 2 2 3 2 4 5
output
Copy
4
Note
In the first example Polycarp can give the following pairs of boxes (pairs are presented by indices of corresponding boxes):
- (2,3)(2,3);
- (5,6)(5,6);
- (1,4)(1,4).
So the answer is 66.
In the second example Polycarp can give the following pairs of boxes (pairs are presented by indices of corresponding boxes):
- (6,8)(6,8);
- (2,3)(2,3);
- (1,4)(1,4);
- (5,7)(5,7).
So the answer is 88.
In the third example Polycarp can give the following pairs of boxes (pairs are presented by indices of corresponding boxes):
- (1,2)(1,2);
- (6,7)(6,7).
So the answer is 44.
因为k最大只有100,记录模数的个数,然后求和即可。
#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
int d[200004];
int num[104];
int main()
{
int n,k;
cin>>n>>k;
memset(num,0, sizeof(num));
for (int i = 0; i < n; ++i) {
cin>>d[i];
num[d[i]%k]++;
}
int ans=0;
for (int i = 1; i < k; ++i) {
if(i==k-i)ans+=min(num[i],num[k-i])/2*2;
else ans+=min(num[i],num[k-i]);
}
printf("%d\n",ans+num[0]/2*2);
}