hihoCoder 1701 挑选子集


        题目链接: http://hihocoder.com/problemset/problem/1701

       基于桶排序的思想,这道题只用桶不用排序,因为任意两个数之差对k求余都等于0,所以只需要求pre[i]%k的值相等的有多少个,然后对其求组合方案数。


AC代码: 

#include <iostream>
#include <cstdio>
#include <cstring>
#define ll long long
#define mod 1000000009
using namespace std;
ll pre[1005];

ll c(ll n,ll m){
  ll sum1 = 1;
  for(long long i = 1 ; i <= m; i ++){
        sum1 = sum1 * (n + 1 - i) / i;
    }
    return sum1 % mod;  
}

int main()
{
  ll n,m,k,ans;
  scanf("%lld%lld%lld",&n,&m,&k);
  memset(pre,0,sizeof(pre));
  for(ll i=0;i<n;i++){
    scanf("%lld",&ans);
    pre[ans % k]++;
  }
  ll sum = 0;
  for(ll i=0;i<k;i++){
    sum += c(pre[i],m);
    sum %= mod;
  }
  cout<<sum<<endl;
  return 0;
}

全部评论

相关推荐

合适才能收到offe...:招聘上写这些态度傲慢的就别继续招呼了,你会发现hr和面试官挺神的,本来求职艰难就可能影响一些心态了,你去这种公司面试的话,整个心态会炸的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务