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(…
3505: [Cqoi2014]数三角形 Time Limits: 1000 ms  Memory Limits: 524288 KB  Detailed Limits   Description…
数三角形 bzoj-3505 CQOI-2014 题目大意:给你一个n*m的网格图,问你从中选取三个点,能构成三角形的个数. 注释:$1\le n,m\le 1000$. 想法:本来是想着等中考完了之后花上一周的时间把之前欠的blog都更掉,然后做了这道题发现网上的题解让我匪夷所思(他们写着任何人都能看懂的代码,说着只有自己才能听懂的话).其实是这样的,求三角形个数就等价于求有多少种选取的方案使得三点共线.显然竖着的和横着的都是可以O(1)的,我们只需要计算斜着的就行了.那么,我们枚举什么才能使…
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. S…
显然可以用总方案数减掉三点共线的情况.对于三点共线,一个暴力的做法是枚举起点终点,其间整点数量即为横纵坐标差的gcd-1.这样显然会T,注意到起点终点所形成的线段在哪个位置是没有区别的,于是枚举线段算出这样的线段条数就可以了. 似乎可以莫比乌斯反演一波. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include&…
传送门 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Sample Input 2 2 Sample Output 76 HINT 1<=m,n<=1000 Solution 首先思路肯定是随意三个点方案-三点共线方案 随意三个点方案随意求 主要求三点共线: 有个神奇的结论:节点坐标gc…
http://blog.csdn.net/zhb1997/article/details/38474795 #include<cstdio> #include<algorithm> #include<iostream> using namespace std; typedef long long ll; int n,m; ll ans; int main() { // freopen("bzoj3505.in","r",stdin…
传送门 正难则反. 可以直接把问题转化成求出三点共线的情况数量. 如果同在一排或一列显然可以直接算,关键是如何求出斜着的. 我们知道,对于一个整点矩形. 如果长为x,宽为y,那么这个矩形任意一条对角线上有gcd(x,y)个整点. 由于n,m很小,我们直接枚举矩形的边长去掉不合法的情况就行了. 细节有点多. 代码: #include<bits/stdc++.h> #define ll long long using namespace std; ll n,m,ans; inline ll gcd…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3505 好题啊好题...好像还曾经出现在什么智力测试卷中来着...当时不会现在还是无法自己推出来... 自己初步的想法是分类成有两点在一条横线上的和三点在不同横线上的: 第一类就是枚举两条横线,枚举有两点的横线上的两个位置,枚举另一点在横线上的位置,再交换两条横线: 也就是 C(n,2) * C(m,2) * m * 2: 第二类就枚举三条横线,再枚举三个位置: 也就是 C(n,3) * m…
[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 题解 就是全部去减,减去在一列的,在一行的,在斜对角的,…
「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…
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)$ 现在我们要算出三点共线的方案…
[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}\)算出网格中…
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 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]数三角形 给定一个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个矩形顶点可以选择,其余两个三角形顶点可以在剩余两条边自由移动…
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),最后减去三点共线的特例…
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…
题目 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. 输入格式 输入一行,包含两个空格分隔的正整数m和n. 输出格式 输出一个正整数,为所求三角形数量. 输入样例 2 2 输出样例 76 数据范围 1<=m,n<=1000 题解 比较容易想到的是用所有方案\(C_{n*m}^{3}\)减去共线的方案 水平和竖直共线很容易算,为\(n * C_{m}^{3}\)和\(m * C_{n}^{3}\) 主要是倾斜的线 我们…
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…
题目描述 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. 输入 输入一行,包含两个空格分隔的正整数m和n. 输出 输出一个正整数,为所求三角形数量. 样例输入 2 2 样例输出 76 题解 容斥原理 三角形数目=选出三个点的方案数-三点共线的方案数. 选出三个点的方案数显然为$C_{(n+1)(m+1)}^3$. 三线共线的方案数,考虑枚举两端点,统计出一个矩形内的方案数,再算出总体方案数.其中点坐标的gcd-1为中间…
我们先把所有三角形用排列组合算出来,再把一行一列上的三点共线减去,然后我们只观察向右上的三点共线,向左上的乘二即可,我们发现我们如果枚举所有的两边点再乘中间点的个数(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…
推导过程 : 组合数+容斥原理+gcd 正确做法是暴力的一种优化,ans=所有情况 - 平行坐标轴的三点共线 - 斜线三点共线 如果快速求斜线三点共线: 首先要知道一个结论,对于点(a,b) (x,y)连成的线段而言(其中a>x,b>y), 在它们中间有gcd(a-x,b-x)-1个整点,因此基本的思路就是枚举两个点, 然后第3个点就是gcd(a-x,b-x)-1种可能了 至于为什么第3个点一定要在中间,是为了保证不重不漏,只用两边的点统计中间的点, 然而这样复杂度太高,于是可以发现,可以将这…
题意 \(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++)…
做完之后看了看题解,怎么一篇和我思路一样的也没有...我好慌啊qwq(所以一定是窝太弱了看不懂dalao的思路) 好吧窝的方法确实很奇怪: 核心代码只有3行 输入 循环 输出 一气呵成 是题解中的豪杰 最重要的是 没有组合数 没有容斥 没有斜率 没有向量 DA☆ZE (只有我们的好朋友gcd 咳咳 那么开始正题(敲黑板) 首先,我们定义一个网格被一个三角形完全覆盖,当且仅当这个三角形的三个顶点都在网格边界上,并且沿着网格内部任意一条线段把网格切开,一定会把三角形切成两部分.比如下面的例子就是一个…
题面 其实这道题不用组合数!不用容斥! 只需要一个gcd和无脑找规律(滑稽 乍一看题目,如果单纯求合法三角形的话情况太多太复杂,我们可以从局部入手,最终扩展到整体. 首先考虑这样的情况: 类似地,我们把三角形三个顶点都在网格边界上,且网格内任意一条线都可以把三角形切成两部分的情况,称为完全覆盖. 下面这种就不算: 不难发现每个顶点在格点上的三角形,都有且仅有一个被它完全覆盖的网格. 所以可将原问题转化为:求出矩形中所有子矩形的完全覆盖三角形数. 又因为完全覆盖三角形数只与子矩形大小有关,与其位置…