BZOJ 3505 CQOI 2014 数三角形 数学

题目大意:给一张m*n的网格,问这里面以网格为顶点的三角形有多少个。

思路:数学题。首先算出所有互不相同的三点对,然后减掉其中三个点在一个直线上的点对就行了。注意答案开long long。

CODE:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

int m,n;

int Gcd(int x,int y);

int main()
{
	cin >> m >> n;
	long long ans = (m + 1) * (n + 1);
	ans = ans * (ans - 1) * (ans - 2) / 6;
	for(int i = 0;i <= m; ++i)
		for(int j = 0;j <= n; ++j) {
			if(i == 0 && j == 0)	continue;
			int x = Gcd(i,j);
			ans -= (x - 1) * (m - i + 1) * (n - j + 1) * (i * j ? 2:1);
		}
	cout << ans << endl;
	return 0;
}

int Gcd(int x,int y)
{
	return y ? Gcd(y,x%y):x;
}
时间: 2024-12-21 09:43:43

BZOJ 3505 CQOI 2014 数三角形 数学的相关文章

[CQOI 2014] 数三角形 &amp; 机械排序臂

数三角形 bzoj 3505 要知道一个公式就是(a,b)和(x,y)两点所成线段上面的整点数是gcd(a-x,b-y)-1,通过枚举原点到map上任意一点所能成的三角形,再平移,得到要去掉的三点共线的点对. 我当时弱智地弄了个O(n^6)的枚举,不过好歹还是对的拿了三十分. = =满分程序和30分程序几乎一样长. program triangle; var m,n,i,j:integer; ans,t:qword; function gcd(a,b:integer):integer; begi

【BZOJ 3505】 [Cqoi2014]数三角形

3505: [Cqoi2014]数三角形 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 664 Solved: 403 [Submit][Status][Discuss] Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Sample Inpu

【BZOJ 3505】 [Cqoi2014]数三角形 容斥原理+排列组合+GCD

我们先把所有三角形用排列组合算出来,再把一行一列上的三点共线减去,然后我们只观察向右上的三点共线,向左上的乘二即可,我们发现我们如果枚举所有的两边点再乘中间点的个数(GCD),那么我们发现所有的两边点都会形成一个矩形对角线,而且他们的形状一定则贡献一定那么我们可以枚举形状来求贡献和. #include <cstdio> typedef long long LL; LL n,m,ans,N,M; LL GCD(LL x,LL y){ return x==0?y:GCD(y%x,x); } int

BZOJ 3503 CQOI 2014 和谐矩阵 高斯消元

题目大意:给出m和n,求出一种方案使得每一个点和周围的四个点的1的个数为偶数. 思路:根据题意可以列出m*n个异或方程,然后组成异或方程组.解这个异或方程组然后输出任意一个解就可以了. PS:值得注意的是,全是0肯定是一个解,显然你不能输出这个解.所以你需要让一个或一些自由元的值为1,至于怎么做,随便yy就行了. PS2:这个题的样例吞掉了空格,然而又是SPJ,所以就是wa..然后我wa了一下午.. CODE: #include <cstdio> #include <cstring>

BZOJ 3506 CQOI 2014 排序机械臂 Splay

题目大意:给出一个序列,给出一种排序方式,模拟这种排序方式排序,并输出每次找到的节点的位置. 思路:它让你做什么你就做什么,无非就是个Reverse,很简单.注意一下排序的时候权值相等的情况就行了. CODE: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MAX 100010 #define INF 0x3f3f3f3f using

BZOJ 3505: [Cqoi2014]数三角形( 组合数 )

先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个点(不合法), 乘起来就好了. ---------------------------------------

Bzoj 3505: [Cqoi2014]数三角形 数论

3505: [Cqoi2014]数三角形 Time Limits: 1000 ms  Memory Limits: 524288 KB  Detailed Limits Description Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Sample Input 输入1: 1 1 输入2: 2 2 Sample Output 输出1: 4 输出2: 76 Data Constraint 对于30%的数据 1<=m,n<=10 对于1

3505: [Cqoi2014]数三角形

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

数三角形 bzoj 1201

数三角形(1s 128MB)triangle [题目描述] 小苏看到一个这样的等边三角形:该等边三角形每边的长度为n且被分成n等份,于是每条边就有n-1个等分点.而整个三角形被连接两个不同边的等分点且平行于三角形的第三边的线段分成了n2个单位等边三角形(边长为1).下图左是n=5的情形: 小苏想知道,删除其中的一些短边后,剩下的边一共组成多少个三角形(包括所有边长为m的三角形),正立的和倒立的都算,只要三角形的3m条短边都没有被删除就算是组成一个三角形).例如,上图右就存在19个三角形. [输入