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−m​d[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相关推荐

  1. kuangbin 数学训练一 Billiard Balls

    题目链接: 传送门 #include<iostream> #include<cstdio> #include<cstring> #include<algori ...

  2. [kuangbin]各种各样的题单

    [kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...

  3. 为什么要学数学?因为这是一场战略性的投资

    来源:数学内参 如果将数学学习的好坏仅仅理解为"刷题"的数量和速度,那充其量也只能成为一名熟练的数学工匠.我们所受的数学训练,所领会的数学思想和精神,所获得的数学教养,无时无刻不在 ...

  4. 讨论:写程序到底需不需要懂数学?

    数学系所学的数学,跟一般人所会用到的数学不太一样.研究所顺利考上的向往已久的资工所,成为名符其实的本科系学生,本以为可以不用再玩数学了,但我发现我错了,是不用再玩那些抽久的高等数学没错,但线性代数.机 ...

  5. 数学史上最简单却最复杂的公式在此

    是什么公理, 让从小家境优渥的他, 在惨遭雪藏后又名声大躁? 是什么公理, 让著名科学杂志一再拒收? 它让人咬牙切齿的证明, 到底是道德的沦丧, 还是人性的泯灭? 接下来, 就让小编带你走进 揭秘神秘 ...

  6. 华裔数学家张益唐:逆境中的数学人生

    中国侨网11月26日电 美国<侨报>日前采访了华裔数学家张益唐夫妇.张益唐儒雅平和,标准的学者形象,一直安静地独自坐在休息区沉思.如果不是夫人孙女士引见介绍,没入休息区零零散散游客中的张益 ...

  7. 别把数学想得太难,数学是一场游戏

    数学是一场游戏 我在国内上中学的时候,150分的数学考试,最低考过27分. 27分大家知道是什么概念吗?我们那时候考试用的是答题卡,27分就相当于把这个答题卡放到地上,然后踩两脚,把鞋印放到机器里-- ...

  8. OpenAI 发布模型实现自动定理证明,妈妈再也不用担心我的数学?

    作者 | 八宝粥 出品 | CSDN(ID:CSDNnews) OpenAI 大招频出,染指数学江湖 日前,OpenAI 研究者Stanislas Polu和Ilya Sutskever在社交媒体发布 ...

  9. 数学史思维导图_8张思维导图揭示:数学应该如何学,才能逆袭为学霸?

    如果说"如何学习数学?"是一个求解题的话,那么接下来就是该问题的求解过程: 第一步,每个学习者的自身情况不同,学习是受多因素影响的,理应找到到自己的长短板,更能"因材施教 ...

最新文章

  1. .net 应用迁移到Mono 工具 (Moma)
  2. Android中的意图匹配--IntentFilter的作用
  3. 011_CSS子元素选择器
  4. hdu5126stars
  5. Ubuntu10.04系统调试TQ2440开发板之一《Ubuntu下搭建TQ2440的程序下载环境》
  6. c++用一级运算比较大小_16.初中数学:怎么比较a、b、c、d的大小?幂的运算,基础常见考题...
  7. Cinchoo ETL-对大型CSV文件进行排序
  8. Spring 源码解析 -- SpringWeb过滤器Filter解析
  9. bzoj 3545: [ONTAK2010]Peaks Kruskal重构树
  10. DEA用法(1)--三阶段DEA模型与DEAP使用方法教程
  11. flutter 的像素尺寸
  12. Excel如何统计多种分隔符号的单元格姓名个数
  13. 感觉自己技术还可以?十几个外包平台分享给你,让你外包接到手软!
  14. Lucene学习总结之一:全文检索的基本原理
  15. 前端面试录音整理(私人版)
  16. 让人眼前一亮的小众PC浏览器
  17. 以太坊geth节点同步亲测经历
  18. inet addr、bcast、mask
  19. 字符编码之间的相互转换 UTF8与GBK
  20. DM9006 linux driver

热门文章

  1. 得物 API 一站式协作平台探索与落地
  2. codevs 1506 传话 题解
  3. linux下创建db2数据库
  4. 某点评获取商品数据及方法(超实用)
  5. 【CS学习笔记】19、代码执行的方式
  6. IDEA下载配置tomcat(官网下载配置)
  7. C语言程序设计 谭浩强 顺序程序设计 知识点
  8. Python学习笔记_01
  9. 企业如何通过EDI系统降低供应链成本
  10. Linux x86-64 IOMMU详解(二)——SWIOTLB(软件IOMMU)