[CC-ANUCBC]Cards, bags and coins

[CC-ANUCBC]Cards, bags and coins

题目大意:

给你\(n(n\le10^5)\)个数,\(q(q\le30)\)次询问,问从中选取若干个数使得这些数之和为\(m(m\le100)\)的方案数。

思路:

不难想到一个比较暴力的动态规划,用\(f[i][j]\)表示用了前\(i\)个数,和为\(j\)的方案数。时间复杂度\(\mathcal O(nmq)\)。

发现动态规划中我们只关心每个数在模\(m\)意义下的值,因此直接用\(n\)个数转移实在是太愚蠢了。

将这些数模\(m\)意义下相等的归为一类,最多有\(m\)类。直接用这\(m\)类数转移即可。

时间复杂度\(\mathcal O(qm^3)\)。

源代码:

#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
    register char ch;
    register bool neg=false;
    while(!isdigit(ch=getchar())) neg|=ch=='-';
    register int x=ch^'0';
    while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
    return neg?-x:x;
}
typedef long long int64;
const int N=2e5+1,mod=1e9+9,M=100;
int a[N],f[M],g[M],fac[N],ifac[N],cnt[M],c[M];
void exgcd(const int &a,const int &b,int &x,int &y) {
    if(!b) {
        x=1,y=0;
        return;
    }
    exgcd(b,a%b,y,x);
    y-=a/b*x;
}
inline int inv(const int &x) {
    int ret,tmp;
    exgcd(x,mod,ret,tmp);
    return (ret%mod+mod)%mod;
}
inline int C(const int &n,const int &m) {
    return (int64)fac[n]*ifac[m]%mod*ifac[n-m]%mod;
}
int main() {
    for(register int i=fac[0]=1;i<N;i++) {
        fac[i]=(int64)fac[i-1]*i%mod;
    }
    ifac[N-1]=inv(fac[N-1]);
    for(register int i=N-1;i>=1;i--) {
        ifac[i-1]=(int64)ifac[i]*i%mod;
    }
    for(register int T=getint();T;T--) {
        const int n=getint(),q=getint();
        for(register int i=1;i<=n;i++) a[i]=getint();
        for(register int i=0;i<q;i++) {
            const int m=getint();
            std::fill(&cnt[0],&cnt[m],0);
            for(register int i=1;i<=n;i++) {
                cnt[(a[i]%m+m)%m]++;
            }
            f[0]=1;
            std::fill(&f[1],&f[m],0);
            for(register int i=0;i<m;i++) {
                std::fill(&c[0],&c[m],0);
                for(register int j=0;j<=cnt[i];j++) {
                    (c[(int64)i*j%m]+=C(cnt[i],j))%=mod;
                }
                std::copy(&f[0],&f[m],g);
                std::fill(&f[0],&f[m],0);
                for(register int j=0;j<m;j++) {
                    for(register int k=0;k<m;k++) {
                        (f[(j+k)%m]+=(int64)g[k]*c[j]%mod)%=mod;
                    }
                }
            }
            printf("%d\n",f[0]);
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/skylee03/p/9438617.html

时间: 2024-10-09 20:12:57

[CC-ANUCBC]Cards, bags and coins的相关文章

Codechef APRIL14 ANUCBC Cards, bags and coins 题解

题目大意 有n个数字,选出一个子集,有q个询问,求子集和模m等于0的方案数%1000000009.(n <= 100000,m <= 100,q <= 30) 假设数据很小,我们完全可以做一个背包. 我们沿着背包的思路,看能不能给物品分一下类,由于m比较小,完全按N个数字模M后的值进行分类,这样就变成了一个多重背包的问题.(转移时要乘上一个组合数) 这时候的时间复杂度是n*m,还是不能过. 对于DP时所枚举到的模m后余数j,它所进行的状态转移是一定的,如果把这些转移先预处理出来,时间复杂

CodeChef--Cards, bags and coins

题目链接 Yet another game from chef. Chef gives you N cards and M bags. Each of the N cards has an integer written on it. Now chef asks you to close your eyes and choose a subset of them. He then sums the numbers written on chosen cards, takes its absolu

邓紫棋开唱惨被轰:滚出娱乐圈

http://www.cnpoc.cn/HZcommonShowFirst.asp?CID=122&CNAME=%B3%BB%D6%DD%CB%D5%CF%C9%C7%F8%D5%D2%D1%A7%C9%FA%C3%C3%C9%CF%C3%C5%B0%B4%C4%A6%B7%FE%CE%F1%A8%801858885v7572%a1%f8k5u21z http://www.cnpoc.cn/HZcommonShowFirst.asp?CID=122&CNAME=%B3%BB%D6%DD%C

览唾寐了酒rkv2v8h37gg8p6qys1d0

该人士表示,整体思路"就是一个放开一个监管,围绕市场化进行改革,同时防止国有资产流失". "国有资产流失是一顶非常可怕的帽子,很多人怕犯错误,不敢推进员工激励.混合所有制等改革." 该人士表示,整体思路"就是一个放开一个监管,围绕市场化进行改革,同时防止国有资产流失". 两年前,财政部为"什么人能够持股"一事,进行了多次讨论.财政部相关政策制定部门人士认为,目前最纠结的问题是:"哪些人可以持股?管理层.技术骨干还是全

《大唐传奇》今日“天镜”内测引爆激战狂潮

%C4%C4%C0%EF%D3%D0%C8%FD%C5%E3%D0%A1%BD%E3%B0%B4%C4%A6%B7%FE%CE%F11550%D2%BB1111%D2%BB580%A3%D6%C9%CF%C3%C5%A3%AD%C8%AB%CC%D7%A3%D6%A8%EF%A8%F5%A8%F8%A8%EF2014-11-29http://tuan.baidu.com/hot/query/45/%B5%A4%B6%AB %C4%C4%C0%EF%D3%D0%C8%FD%C5%E3%D0%A1%

商敲惺型巫sv5wbi48csmext

"十八届三中全会提出,在混合所有制企业可以搞员工持股,但这些事情比较谨慎,既有经验又有教训."该人士表示.随着国企改革的深入,2016年将有更多的国企改革亮点值得期待. 不久前,国务院国有企业改革领导小组办公室针对社会关注的热点.难点问题提出了将在2016年推进"十项改革试点".具体包括:一是落实董事会职权的试点:二是市场化选聘经营管理者的试点:三是推行职业经理人制度的试点:四是企业薪酬分配差异化改革的试点:五是国有资本投资运营公司的试点:六是中央企业兼并重组的试点

热圩死滔难wq42ceruh63ghfkk9ou

员工持股启动随着国企改革的深入,2016年将有更多的国企改革亮点值得期待. 前述国资委人士认为:"一般的企业不适合员工持股,一个万人大厂,所有员工都持股,没有意义.容易造成福利性的持股.实际上,改革30年,已经证明,全员持股不是一个好办法,要分企业.分行业,根据它的特点进行持股." 在不久前落幕的2016年全国两会上,国务院国有企业改革领导小组组长马凯对外界表示:"去年是国企改革方案制定的一年,今年是扎扎实实的落实年." <国有科技型企业股权和分红激励暂行办法

颇畚粕岩霖a8nys66u6515ut2erj

"十八届三中全会提出,在混合所有制企业可以搞员工持股,但这些事情比较谨慎,既有经验又有教训."该人士表示. 据报道,国务院国资委副秘书长彭华岗日前在深入推进国企国资改革研讨会上表示,今年将围绕重点难点问题开展"十项改革试点",通过试点取得突破.多点开花.彭华岗透露,过去一年国企改革取得重大突破和进展,17家省级国资委和40户中央企业提出方案.公司制股份制改革成效显著,全国国有企业改制面已达80%:法人治理结构不断完善,2015年中央企业建设规范董事会的企业增加11户

Sustain Broadsheet Bags Affordability As A Good Deal

The final classified generally as Honma Beres place in Japan EMPLOYEES bags for sale but ?? I love the ability to jump in and take the set. For someone who is 10-15 HCP, I think it could be a game? .Torba There are more players than teams JAPAN Berc,