贴个网址 :

ZJNU-2022暑期专题-组合数学 - Virtual Judge (vjudge.net)

学长贴的自闭知识

目录

知识点:

求逆元性价比最高公式

错排

Lucas

例题:

E - Shinyruo and KFC

G - 硬币购物


知识点:

求逆元性价比最高公式

先求出尾巴的inv,然后层层往前回去。

rep(i,2,N-5){f[i]=f[i-1]*i%p;
}
inv[N-5]=fastpower(f[N-5],p-2,p);
nep(i,N-6,2){inv[i]=inv[i+1]*(i+1)%p;
}

错排

//错排递推公式
d[1]=0;d[2]=1;d[3]=2;
//d表示全错排n个数的情况有多少
rep(i,4,N){d[i]=((i-1)*(d[i-1]+d[i-2]))%p;
}
//故5个数错排3个,就是C(3,5)*d[3];

Lucas

//求组合,当q次询问余数p(<1e6且质数)的值会改变的时候使用。
int lucas(int n,int m){if (!m) return 1;return c(n%p,m%p)*lucas(n/p,m/p)%p;
}

例题:

E - Shinyruo and KFC

大意:n个食物,每个食物ai个,m个队伍,每个队伍每种食物最多吃一个,求队伍分别为1~m的时候,分配食物吃完的不同情况。

学长说这是一道铜牌题。

这道题还有个题面,就是所有ai的和不超过1e5,而n也是1e5,那么不同的ai最多只有sqrt(1e5)个,所以抽屉原理,会有一堆重复的,这时候就可以unordered_map存进去,时间复杂度就变成了,n*sqrt(1e5)*快速幂logn,就能过了。

总结:铜牌题更注重对不同题目数据的处理。

#include <bits/stdc++.h>
#define rep(i,l,r) for (int i=l;i<=r;i++)
#define nep(i,r,l) for (int i=r;i>=l;i--)
#define pii pair<int,int>
#define int long long
#define CIO std::ios::sync_with_stdio(false)
using namespace std;
const int N=2e5+5;
const int p=998244353;
int a[N],t[N],tn[N];
int f[N],inv[N],finv[N];
unordered_map <int,int> mp;
int fastpower(int a,int x,int p){int ans=1;while (x){if (x&1) ans=(ans*a)%p;x=x/2;a=(a*a)%p;}return ans%p;
}void Int(){f[0]=inv[0]=f[1]=inv[1]=finv[0]=finv[1]=1;rep(i,2,N-5){f[i]=f[i-1]*i%p;}inv[N-5]=fastpower(f[N-5],p-2,p);nep(i,N-6,2){inv[i]=inv[i+1]*(i+1)%p;}
}
int c(int m,int n){if (m>n) return 0;return f[n]*inv[n-m]%p*inv[m]%p;
}
void work(){Int();int n,m;cin>>n>>m;int ma=0;rep(i,1,n){cin>>a[i];mp[a[i]]++;ma=max(ma,a[i]);}int ans=0;unordered_map<int,int>::iterator it;int cnt=0;for(it=mp.begin();it!=mp.end();it++){t[++cnt]=it->second;tn[cnt]=it->first;}rep(i,1,m){if (i<ma) cout<<0<<endl;else{ans=1;rep(j,1,cnt){if (t[j]!=0){int zhi=fastpower(c(tn[j],i),t[j],p);if (zhi!=0){ans=ans*zhi%p;}}}cout<<ans<<endl;}}
}
signed main(){CIO;work();return 0;
}

G - 硬币购物

共有4种硬币。面值分别为c1​,c2​,c3​,c4​。

某人去商店买东西,去了n次,对于每次购买,他带了 di​ 枚 i种硬币,想购买 s 的价值的东西。请问每次有多少种付款方法。

这是一道dp+容斥的一道题,如果没有数量限制,就是一道完全背包的板子题目,我们假设一个超过限制,其他的就是完全背包,然后假设四遍,最后减掉,但发现会多减掉,这就是容斥原理了,然后再继续处理,暴力+-就好了,只有4种硬币。

#include <bits/stdc++.h>
#define rep(i,l,r) for (int i=l;i<=r;i++)
#define nep(i,r,l) for (int i=r;i>=l;i--)
#define pii pair<int,int>
#define int long long
#define CIO std::ios::sync_with_stdio(false)
using namespace std;
const int N=2e5+5;
const int p=998244353;
int c[10],dp[N];
int d[10],s;
int sum(int idx){return c[idx]*(d[idx]+1);
}
void work(){int n;rep(i,1,4){cin>>c[i];}dp[0]=1;rep(i,1,4){for (int j=c[i];j<N;j++){dp[j]+=dp[j-c[i]];}}cin>>n;rep(i,1,n){rep(j,1,4){cin>>d[j];}cin>>s;int ans=dp[s];if (s>=sum(1)) ans-=dp[s-sum(1)];if (s>=sum(2)) ans-=dp[s-sum(2)];if (s>=sum(3)) ans-=dp[s-sum(3)];if (s>=sum(4)) ans-=dp[s-sum(4)];if (s>=sum(1)+sum(2)) ans+=dp[s-sum(1)-sum(2)];if (s>=sum(1)+sum(3)) ans+=dp[s-sum(1)-sum(3)];if (s>=sum(1)+sum(4)) ans+=dp[s-sum(1)-sum(4)];if (s>=sum(2)+sum(3)) ans+=dp[s-sum(2)-sum(3)];if (s>=sum(2)+sum(4)) ans+=dp[s-sum(2)-sum(4)];if (s>=sum(3)+sum(4)) ans+=dp[s-sum(3)-sum(4)];if (s>=sum(1)+sum(2)+sum(3)) ans-=dp[s-sum(1)-sum(2)-sum(3)];if (s>=sum(1)+sum(3)+sum(4)) ans-=dp[s-sum(1)-sum(3)-sum(4)];if (s>=sum(1)+sum(2)+sum(4)) ans-=dp[s-sum(1)-sum(2)-sum(4)];if (s>=sum(2)+sum(3)+sum(4)) ans-=dp[s-sum(2)-sum(3)-sum(4)];if (s>=sum(1)+sum(2)+sum(3)+sum(4)) ans+=dp[s-sum(1)-sum(2)-sum(3)-sum(4)];cout<<ans<<endl;}
}
signed main(){CIO;work();return 0;
}

专题讲座5 组合数学 学习心得相关推荐

  1. 听完计算机知识讲座后感悟,听专题讲座心得体会范文(精选10篇)

    听专题讲座心得体会范文(精选10篇) 我们在一些事情上受到启发后,不妨将其写成一篇心得体会,让自己铭记于心,它可以帮助我们了解自己的这段时间的学习.工作生活状态.怎样写好心得体会呢?以下是小编整理的听 ...

  2. “培训促提升 学习共成长”公益专题讲座活动

    为落实立德树人的根本任务,进一步提升全园保教质量,促进幼儿生活科学化.规范化.精细化.11月份驻马店市实验幼儿园组织三个园区教师积极参加<政策引领 护航品质园所高质量发展>公益专题讲座. ...

  3. QA|青少年无人机学习要点解读(内含专题讲座信息)

    鹰博士 鹰诺科技INNO 杭州市教育局办公室发布了<2022年杭州市区各类高中学校招收体育特长生的范围调整政策>,首次将科技型电子竞技(FPV无人机.机器人竞技)排名列入体育特长生报名资格 ...

  4. 计算机科学与技术前沿讲座心得体会,技术学习心得体会范文(精选10篇)

    技术学习心得体会范文(精选10篇) 有了一些收获以后,可以通过写心得体会的方式将其记录下来,这么做可以让我们不断思考不断进步.到底应如何写心得体会呢?以下是小编整理的技术学习心得体会范文(精选10篇) ...

  5. 计算机未来就业讲座心得体会,计算机学习心得体会范文(精选3篇)

    计算机学习心得体会范文(精选3篇) 当我们经过反思,对生活有了新的看法时,将其记录在心得体会里,让自己铭记于心,这么做能够提升我们的书面表达能力.那么你知道心得体会如何写吗?下面是小编收集整理的计算机 ...

  6. 半学期学计算机有感论文,【计算机学习心得论文】_计算机学习心得论文参考资料-毕业论文范文网...

    英语学习的一点心得 英语学习的一点心得英语学习的一点心得,一提到学习英语,很多同学就觉得是个头疼的问题.更有同学说,我天生没有英语细胞.我觉得,英语成绩上不去,还是跟自己的学习态度和方法有很大关系.英 ...

  7. 计算机90学时培训小结,90学时培训学习心得体会

    人道是课难上,复习课更难上.此话着实不假,我在日常教学过程中也深有体会.毋庸讳言,本人在日常教学过程中抑或自以为是--重复知识点加练习,习题加点评,抑或面对复习课一脸茫然,尤其是面对如何上出高效.新颖 ...

  8. 初中数学老师计算机培训反思,初中数学特级教师培训会学习心得体会

    第1篇:初中数学特级教师培训会学习心得体会 每次培训都感慨很多,收获很多.但都如刘老师所讲的,只是当时一热,一耽搁就什么都忘了. 昨天讲的人很多,讲的也很好,觉得自己要说的别人基本都讲到了,所以也就一 ...

  9. 教师资格证计算机培训心得,教师培训学习心得体会范文4篇

    作为一名人民教师,为了更好的教育好自己的学生,参加一些培训活动是十分有必要的,每一次参加完培训后我们都会有着不一样的感悟--以下是由出国留学网小编为大家整理的"教师培训学习心得体会范文4篇& ...

最新文章

  1. 批处理命令学习笔记——Start命令
  2. csu 1554: SG Value 思维题
  3. leetcode103JAVA_[LeetCode] 103. Binary Tree Zigzag Level Order Traversal Java
  4. 计算机网络原理(第三章) 传输层 课后习题
  5. mysql创建表时表明加单引号_python在MySQL表名周围插入单引号(‘)
  6. linux中删除mysql用户_linux系统下mysql添加用户、删除用户、授权、修改密码等sql命令使用...
  7. java 双向链表_Day26:二叉搜索树与双向链表
  8. 计算机课平时成绩重要吗,大学计算机基础课程平时成绩评定方法的研究.pdf
  9. 微信小程序电商实战-购物车(上)
  10. 微信小程序人脸识别获取照片,并解决相机拍照在ios上有声音问题
  11. oracle:如何构造一个随机姓名出来?
  12. maccms重定向次数过多
  13. 人工智能+专业运维:企业联络中心的数字化转型
  14. R语言柯西(cauchy)分布
  15. 绝对经典!百句浓缩版小常识(ZT)
  16. first season twenty-third episode,Ben was born!!!,Hi Ben???
  17. 详解ELF可执行文件格式:读取头部信息和程序表头
  18. 上海车展:比亚迪宋L概念车全球首发,这是要硬扛特斯拉?
  19. 【内存】内存对齐 的原理
  20. C语言数据结构-实验一 C语言回顾及算法分析

热门文章

  1. CATIA V5R19 CAA RADE 资源及详细安装过程
  2. 爬新浪国内新闻网的某个新闻的评论
  3. 信号与系统仿真实验——实验二 傅立叶变换MATLAB的实现及傅里叶变换性质的分析
  4. 大学生读者让我帮找二分查找的bug
  5. uni-app h5修改浏览器导航栏的 title以及icon
  6. TensorFlow 之 构建人物识别系统
  7. 钜惠来袭!免费获取跳一跳助手,助你登上排行榜宝座
  8. 中国与外国(发达国家)
  9. Android自定义View实战:简约风歌词控件,Android开发者值得深入思考的几个问题
  10. 自动化测试工具有哪些?10款好用的用具推荐给你