给n个数,和一个k,在n个数中选几对数,保证每对数相加可以整除k。
求最大能选几个数。
思路:把每个x%k的值求出
eg:当k为3时
cnt[1]+cnt[2]就可整除k
#include<iostream> #include<algorithm> #include<cstring> using namespace std; const int maxn=2e5+5; int cnt[maxn];//用来存余数的数量 int main() { int n,k,x,ans=0; cin>>n>>k; memset(cnt,0,sizeof(cnt)); for(int i=0;i<n;i++) { cin>>x; cnt[x%k]++; } ans+=cnt[0]/2;//余数为0说明肯定能整除k for(int i=1;i<(k+1)/2;i++) ans+=min(cnt[i],cnt[k-i]); //取极限 if(k%2==0) ans+=cnt[k/2]/2; cout<<ans*2<<endl; }