BSOJ 3899 -- 【CQOI2014】 数三角形】的更多相关文章

3505: [Cqoi2014]数三角形 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=3505 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Samp…
3505: [Cqoi2014]数三角形 Time Limits: 1000 ms  Memory Limits: 524288 KB  Detailed Limits   Description…
3505: [Cqoi2014]数三角形 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 478  Solved: 293[Submit][Status] Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Sample Input 2 2 Sam…
先n++, m++ 显然答案就是C(3, n*m) - m*C(3, n) - n*C(3, m) - cnt. 表示在全部点中选出3个的方案减去不合法的, 同一行/列的不合法方案很好求, 对角线的不合法方案cnt比较麻烦. 枚举对角线(左下-右上), 即(0, 0)-(x, y), 我们发现这种情况有(n-y)*(m-x)*2(算上左上-右下的)种, 然后中间有gcd(x, y)-1个点(不合法), 乘起来就好了. ---------------------------------------…
3505: [Cqoi2014]数三角形 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1324  Solved: 807[Submit][Status][Discuss] Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Sample Inp…
3505: [Cqoi2014]数三角形 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 注意三角形的三点不能共线. 1<=m,n<=1000 $n++ m++$ $ans={nm\choose 3}-n*{m\choose 3}-m*{n\choose 3}-斜线上的情况$ n和m很小,我们直接枚举以(0,0)为左端点的斜线,以两端点为两个点,中间的第三个点有$(x,y)-1$种选择,然后乘上平移的方案数再乘以2,斜线还有反向 #include <iostream>…
[CQOI2014]数三角形 给定\(n\times m\)的网格,求三个点在其格点上的三角形个数,1<=m,n<=1000. 解 法一:直接 显然为组合计数问题,关键在于划分问题,注意到一个三角形必然会被一个最小的矩形所限制,于是可以以矩形来划分,而现在问题变成对一个矩形内最大的三角形的方案数,显然最大三角形关键在于三角形顶点与矩形顶点之间的关系. 设有一\(a\times b\)矩形,有 1: 三角形有一个顶点在矩形顶点上,有4个矩形顶点可以选择,其余两个三角形顶点可以在剩余两条边自由移动…
P3166 [CQOI2014]数三角形 前置知识:某两个点$(x_{1},,y_{1}),(x_{2},y_{2})\quad (x_{1}<x_{2},y_{1}<y_{2})$所连成的线段穿过整点的个数为$gcd(x_{2}-x_{1},y_{2}-y_{1})-1$ “注意三角形的三点不能共线.” 暗示你可以处理出总方案再减去三点共线的方案. 显然,总方案就是在$(n+1)*(m+1)$个点中任选$3$个.于是$tot=C((n+1)*(m+1),3)$ 现在我们要算出三点共线的方案…
3505: [Cqoi2014]数三角形 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形.注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Sample Input 2 2 Sample Output 76 HINT 数据范围1<=m,n<=1000 这肯定是很典型的排列组合水题.先n++,m++,再C(n*m,3),最后减去三点共线的特例…
[BZOJ3505][Cqoi2014]数三角形 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Sample Input 2 2 Sample Output 76 数据范围 1<=m,n<=1000 题解:显然要用补集法,我们只需要求出三点共线的方案数即可.方法是先枚举两端的点所形成的向…
[bzoj3505][Cqoi2014]数三角形 2014年5月15日3,5230 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4×4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Sample Input 2 2 Sample Output 76 数据范围1<=m,n<=1000 题解 就是全部去减,减去在一列的,在一行的,在斜对角的,…
[CQOI2014]数三角形 题解(数论+容斥) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1328780 链接题目地址:洛谷P3166 BZOJ 3505 思想还是很巧妙的...(对于我这种菜鸡) 理解题意 首先它说\(n×m\)的网格,实际上是有\((n+1)×(m+1)\)个点来放三角形的顶点 然后就是算三角形的个数 怎么做 PS:以下所讲的所有\(n\)都是\(n+1\),\(m\)也是 可以用\(\dbinom{n×m}{3}\)算出网格中…
「BZOJ3505」[CQOI2014] 数三角形 这道题直接求不好做,考虑容斥,首先选出3个点不考虑是否合法的方案数为$C_{(n+1)*(m+1)}^{3}$,然后减去三点一线的个数就好了.显然不能枚举端点,我们可以考虑枚举两个点的x,y差值i,j,那么中间整点的个数为(gcd(i,j)-1),这样的正方形有多个,所以(n-i+1)*(m-j+1)*(gcd(i,j)-1)*2,乘2是因为有两条对角线,但是当i=0或j=0是就不能乘2了. #include<iostream> #inclu…
数三角形 bzoj-3505 CQOI-2014 题目大意:给你一个n*m的网格图,问你从中选取三个点,能构成三角形的个数. 注释:$1\le n,m\le 1000$. 想法:本来是想着等中考完了之后花上一周的时间把之前欠的blog都更掉,然后做了这道题发现网上的题解让我匪夷所思(他们写着任何人都能看懂的代码,说着只有自己才能听懂的话).其实是这样的,求三角形个数就等价于求有多少种选取的方案使得三点共线.显然竖着的和横着的都是可以O(1)的,我们只需要计算斜着的就行了.那么,我们枚举什么才能使…
http://www.lydsy.com/JudgeOnline/problem.php?id=3505 (题目链接) 题意 给定一个n*m的网格,请计算三点都在格点上的三角形共有多少个. Solution $${ans=平面中选三个点的方案数-三点共线的方案数}$$ $${ans=C_{(n+1)*(m+1)}^{3}-(n+1)*C_{m+1}^{3}-(m+1)*C_{n+1}^{3}-斜的三点共线的方案数}$$ 斜的三点共线方案数不会求..左转题解:http://blog.csdn.ne…
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. S…
题意 \(n * m(1 \le n, m \le 1000)\)的网格,求顶点在格点上三角形的个数. 分析 假设\(n \le m\) \(ans = \binom{(n+1) * (m+1)}{3} - L\),其中\(L\)表示三点共线的方案数. 所以 $$\begin{align}L& = \frac{1}{2} \sum_{dx=0}^{n} \sum_{dy=0}^{m} \sum_{fx=0}^{n} \sum_{fy=0}^{m} (gcd(|dx-fx|, |dy-fy|)-1…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3505 [题意] 在n个格子中任选3点构成三角形的方案数. [思路] 任选3点-3点共线的情况. [代码] #include<cstdio> #include<iostream> using namespace std; typedef long long ll; ll C[][]; void get_pre(int n) { C[][]=; ;i<=n;i++)…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3505 [题目大意] 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 注意三角形的三点不能共线. [题解] 我们计算三个点组合的情况,去除横竖三共线,以及斜着三点共线的情况即可. 一个矩形斜对角上的整点数为其长宽的最大公约数+1. [代码] #include <cstdio> #include <algorithm> using namespace std…
题目描述 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. 输入 输入一行,包含两个空格分隔的正整数m和n. 输出 输出一个正整数,为所求三角形数量. 样例输入 2 2 样例输出 76 题解 容斥原理 三角形数目=选出三个点的方案数-三点共线的方案数. 选出三个点的方案数显然为$C_{(n+1)(m+1)}^3$. 三线共线的方案数,考虑枚举两端点,统计出一个矩形内的方案数,再算出总体方案数.其中点坐标的gcd-1为中间…
题目 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. 输入格式 输入一行,包含两个空格分隔的正整数m和n. 输出格式 输出一个正整数,为所求三角形数量. 输入样例 2 2 输出样例 76 数据范围 1<=m,n<=1000 题解 比较容易想到的是用所有方案\(C_{n*m}^{3}\)减去共线的方案 水平和竖直共线很容易算,为\(n * C_{m}^{3}\)和\(m * C_{n}^{3}\) 主要是倾斜的线 我们…
传送门 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Sample Input 2 2 Sample Output 76 HINT 1<=m,n<=1000 Solution 首先思路肯定是随意三个点方案-三点共线方案 随意三个点方案随意求 主要求三点共线: 有个神奇的结论:节点坐标gc…
做完之后看了看题解,怎么一篇和我思路一样的也没有...我好慌啊qwq(所以一定是窝太弱了看不懂dalao的思路) 好吧窝的方法确实很奇怪: 核心代码只有3行 输入 循环 输出 一气呵成 是题解中的豪杰 最重要的是 没有组合数 没有容斥 没有斜率 没有向量 DA☆ZE (只有我们的好朋友gcd 咳咳 那么开始正题(敲黑板) 首先,我们定义一个网格被一个三角形完全覆盖,当且仅当这个三角形的三个顶点都在网格边界上,并且沿着网格内部任意一条线段把网格切开,一定会把三角形切成两部分.比如下面的例子就是一个…
题面 其实这道题不用组合数!不用容斥! 只需要一个gcd和无脑找规律(滑稽 乍一看题目,如果单纯求合法三角形的话情况太多太复杂,我们可以从局部入手,最终扩展到整体. 首先考虑这样的情况: 类似地,我们把三角形三个顶点都在网格边界上,且网格内任意一条线都可以把三角形切成两部分的情况,称为完全覆盖. 下面这种就不算: 不难发现每个顶点在格点上的三角形,都有且仅有一个被它完全覆盖的网格. 所以可将原问题转化为:求出矩形中所有子矩形的完全覆盖三角形数. 又因为完全覆盖三角形数只与子矩形大小有关,与其位置…
Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Sample Input 2 2 Sample Output 76 数据范围 1<=m,n<=1000 太伤心了..不能abs(int)??? 首先格点个数是(n+1)*(m+1)的,所以我们先把n和m都+1. 先选出三个不同点,方案数是C(…
显然可以用总方案数减掉三点共线的情况.对于三点共线,一个暴力的做法是枚举起点终点,其间整点数量即为横纵坐标差的gcd-1.这样显然会T,注意到起点终点所形成的线段在哪个位置是没有区别的,于是枚举线段算出这样的线段条数就可以了. 似乎可以莫比乌斯反演一波. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include&…
Description: 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Hint: 1<=m,n<=1000 Solution: 直接算三角形肯定算死. 所以,先考虑所有的可能三角形.再减去不合法的三点共线的情况. 所有三角形:C((n+1)*(m+1),3) 不合法的情况怎么处理?? 开始的想法: 1.找所有的两端在坐标轴上的直线,算出来整点数:gcd(x,y)+1:再算上下,左右的直线. 但是发现可能有的不合法…
Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Sample Input 2 2 Sample Output 76 数据范围1<=m,n<=1000     因为就在做这道题之前看的一道题……下意识以为只有直线和对角线的情况,然后搞成O(n)算法似乎自己比其他写题解的神犇厉害??事实上我错…
lx让做的题,其实很简单,难度评到紫令人吃惊 首先读进来\(n,m\)先\(++\),之后就是一个格点数为\(n*m\)的矩阵了 我们直接求很那做,补集转化一下,我们容斥来做 首先所有的情况自然是\(C_{n*m}^3\)了 再算出不合法的情况 之后有\(m\)列,三个点在同一列上的方案数自然是\(m*C_n^3\) 有\(n\)行,三个点在同一行的方案数是\(n*C_m^3\) 最后还有斜线上的情况,由于一条方向向量为\((x,y)\)的直线,当两个端点在整点上的时候,直线上还有\(gcd(x…
我们先把所有三角形用排列组合算出来,再把一行一列上的三点共线减去,然后我们只观察向右上的三点共线,向左上的乘二即可,我们发现我们如果枚举所有的两边点再乘中间点的个数(GCD),那么我们发现所有的两边点都会形成一个矩形对角线,而且他们的形状一定则贡献一定那么我们可以枚举形状来求贡献和. #include <cstdio> typedef long long LL; LL n,m,ans,N,M; LL GCD(LL x,LL y){ ?y:GCD(y%x,x); } int main(){ sc…