通过使用map容器存储每张试卷题的个数对k取余的值 及key=0,证明有mp[key]张试卷题数是k的倍数,可以单独放到一天 然后key和k-key两组数放到一天计算后mp[k-key]置零防止重复计算
#include<bits/stdc++.h> #include<unordered_map> #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0) using namespace std; typedef long long ll;
map<int,int> mp; int n, k;
void solve() { cin >> n >> k; int cnt=0; for (int i = 0; i < n; i++) { int a; cin >> a; mp[a%k]++; }
// v的取值区间 1~k-1
for(auto &[v,w]:mp){
if(v==0){
cnt+=w;
continue;
}
//如果k是2的倍数 mp[v]一定是2的倍数
if(2*v==k)
cnt+=(w/2);
else{
cnt+=min(w,mp[k-v]);
mp[k-v]=0;
}
}
cout<<cnt<<endl;
}
int main() { IOS; int _ = 1; //cin >> ; while (--) { solve(); } return 0; }