kuangbin数学训练2
LightOJ - 1058 Parallelogram Counting
题意
给出若干个点坐标,问最多能构成多少个不同的平行四边形
思路
找每条线段的中点重合即可
假如 m条线段的中点重合,则可构成Cm2C_m^2Cm2个平行四边形
代码(转)
#include <cstdio>
#include <stack>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#include <map>
#include <vector>
#include <queue>
#include <set>
#define eps 1e-8
typedef long long ll;
const double PI = acos(-1.0);
const int maxn = 1e6;
const int INF = 0x3f3f3f;
const ll linf = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9+7;
using namespace std;
int n;
struct node
{int x,y;
}p1[maxn+5],p2[maxn+5];
bool judge(int a, int b)
{if(p2[a].x == p2[b].x && p2[a].y == p2[b].y)return 1;return 0;
}
bool cmp(node a, node b)
{if(a.x==b.x)return a.y<b.y;return a.x<b.x;
}
int main()
{//ios::sync_with_stdio(false);int T;scanf("%d",&T);int tt = 1;while(T--){scanf("%d",&n);for(int i = 0; i<n; i++)scanf("%d %d",&p1[i].x,&p1[i].y);int k = 0;//计算所有不同点对的中点for(int i = 0; i<n; i++)for(int j = i+1; j<n; j++){p2[k].x = (p1[i].x+p1[j].x);p2[k++].y = (p1[i].y+p1[j].y);}ll cnt = 1,ans = 0;sort(p2,p2+k,cmp);for(int i = 1; i<k; i++){if(judge(i,i-1))cnt++;else{ans += (cnt-1)*cnt/2;cnt = 1;}}ans += (cnt-1)*(cnt)/2;printf("Case %d: %lld\n",tt++,ans);}return 0;
}
LightOJ - 1067 Combinations
思路
求组合数模板,加深印象练手
代码
#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;typedef long long LL;const int N = 1000010, mod = 1000003;int fact[N];
int infact[N];int qmi(int a, int b, int mod) {int res = 1;while(b) {if(b & 1)res = (LL)res * a % mod;a = (LL)a * a % mod;b >>= 1;}return res;
}void init() {fact[0] = infact[0] = 1;for (int i = 1; i < N; i ++) {fact[i] = (LL)fact[i - 1] * i % mod;infact[i] = (LL)infact[i - 1] * qmi(i, mod - 2, mod) % mod;}
}int cal(int n, int m) {return (LL)fact[n] * infact[m] % mod * infact[n - m] % mod;
}int main() {int id = 0;int T;scanf("%d", &T);init();while(T --) {int n, m;scanf("%d%d", &n, &m);int ans = cal(n, m);printf("Case %d: %d\n", ++ id, ans);}return 0;
}
LightOJ - 1095 Arrange the Numbers
题意
n个数1,2,3…n,问你前m个数中有只有k个数在原位上的方案数。
思路
组合数错排问题
首先前m个数k个在原位置的方案CmkC_m^kCmk
然后前m个数剩下的m−km-km−k必须错排
而后面的n−mn-mn−m个数,可错排,可不错排
于是可以列举后n−mn-mn−m个数不错排的个数的情况,枚举范围[0,n-m]
于是答案为
Cnk∗(∑i=0n−md[n−k−i]∗Cn−mi)C_n^k*(\sum_{i=0}^{n-m}d[n-k-i]*C_{n-m}^{i})Cnk∗(∑i=0n−md[n−k−i]∗Cn−mi)
注:
求错排的公式: f(n) = (n-1)*(f(n-1)+f(n-2))
证明
代码
#include<iostream>
#include<cstring>
#include<algorithm>using namespace std;const int N = 1010, mod = 1000000007;typedef long long LL;int fact[N], infact[N];
int d[N];int qmi(int a, int b, int mod) {int res = 1;while(b) {if(b & 1)res = (LL)res * a % mod;a = (LL)a * a % mod;b >>= 1;}return res;
}void init() {fact[0] = infact[0] = 1;for (int i = 1; i < N; i ++) {fact[i] = (LL)fact[i - 1] * i % mod;infact[i] = (LL)infact[i - 1] * qmi(i, mod - 2, mod) % mod;}d[0] = 1, d[1] = 0;for (int i = 2; i < N; i ++)d[i] = (LL)(i - 1) * (d[i - 1] + d[i - 2]) % mod;
}int calc(int a, int b) {return (LL)fact[a] * infact[a - b] % mod * infact[b] % mod;
}int main() {init();int T;int id = 0;scanf("%d", &T);while(T --) {int n, m, k;scanf("%d%d%d", &n, &m, &k);LL ans = 0;for (int i = 0; i <= n - m; i ++) {ans = (ans + (LL)d[n - k - i] * calc(n - m, i) % mod) % mod;}ans = (LL)ans * calc(m, k) % mod;printf("Case %d: %lld\n", ++id, ans);}return 0;
}
kuangbin数学训练2相关推荐
- kuangbin 数学训练一 Billiard Balls
题目链接: 传送门 #include<iostream> #include<cstdio> #include<cstring> #include<algori ...
- [kuangbin]各种各样的题单
[kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...
- 为什么要学数学?因为这是一场战略性的投资
来源:数学内参 如果将数学学习的好坏仅仅理解为"刷题"的数量和速度,那充其量也只能成为一名熟练的数学工匠.我们所受的数学训练,所领会的数学思想和精神,所获得的数学教养,无时无刻不在 ...
- 讨论:写程序到底需不需要懂数学?
数学系所学的数学,跟一般人所会用到的数学不太一样.研究所顺利考上的向往已久的资工所,成为名符其实的本科系学生,本以为可以不用再玩数学了,但我发现我错了,是不用再玩那些抽久的高等数学没错,但线性代数.机 ...
- 数学史上最简单却最复杂的公式在此
是什么公理, 让从小家境优渥的他, 在惨遭雪藏后又名声大躁? 是什么公理, 让著名科学杂志一再拒收? 它让人咬牙切齿的证明, 到底是道德的沦丧, 还是人性的泯灭? 接下来, 就让小编带你走进 揭秘神秘 ...
- 华裔数学家张益唐:逆境中的数学人生
中国侨网11月26日电 美国<侨报>日前采访了华裔数学家张益唐夫妇.张益唐儒雅平和,标准的学者形象,一直安静地独自坐在休息区沉思.如果不是夫人孙女士引见介绍,没入休息区零零散散游客中的张益 ...
- 别把数学想得太难,数学是一场游戏
数学是一场游戏 我在国内上中学的时候,150分的数学考试,最低考过27分. 27分大家知道是什么概念吗?我们那时候考试用的是答题卡,27分就相当于把这个答题卡放到地上,然后踩两脚,把鞋印放到机器里-- ...
- OpenAI 发布模型实现自动定理证明,妈妈再也不用担心我的数学?
作者 | 八宝粥 出品 | CSDN(ID:CSDNnews) OpenAI 大招频出,染指数学江湖 日前,OpenAI 研究者Stanislas Polu和Ilya Sutskever在社交媒体发布 ...
- 数学史思维导图_8张思维导图揭示:数学应该如何学,才能逆袭为学霸?
如果说"如何学习数学?"是一个求解题的话,那么接下来就是该问题的求解过程: 第一步,每个学习者的自身情况不同,学习是受多因素影响的,理应找到到自己的长短板,更能"因材施教 ...
最新文章
- .net 应用迁移到Mono 工具 (Moma)
- Android中的意图匹配--IntentFilter的作用
- 011_CSS子元素选择器
- hdu5126stars
- Ubuntu10.04系统调试TQ2440开发板之一《Ubuntu下搭建TQ2440的程序下载环境》
- c++用一级运算比较大小_16.初中数学:怎么比较a、b、c、d的大小?幂的运算,基础常见考题...
- Cinchoo ETL-对大型CSV文件进行排序
- Spring 源码解析 -- SpringWeb过滤器Filter解析
- bzoj 3545: [ONTAK2010]Peaks Kruskal重构树
- DEA用法(1)--三阶段DEA模型与DEAP使用方法教程
- flutter 的像素尺寸
- Excel如何统计多种分隔符号的单元格姓名个数
- 感觉自己技术还可以?十几个外包平台分享给你,让你外包接到手软!
- Lucene学习总结之一:全文检索的基本原理
- 前端面试录音整理(私人版)
- 让人眼前一亮的小众PC浏览器
- 以太坊geth节点同步亲测经历
- inet addr、bcast、mask
- 字符编码之间的相互转换 UTF8与GBK
- DM9006 linux driver