【排列组合】bzoj3505 [Cqoi2014]数三角形

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);
    scanf("%d%d",&n,&m); ++n; ++m;
    ans=(ll)(n*m-2)*(ll)(n*m-1)*(ll)(n*m)/6ll;
    ans-=(ll)n*(ll)(m-2)*(ll)(m-1)*(ll)m/6ll;
    ans-=(ll)m*(ll)(n-2)*(ll)(n-1)*(ll)n/6ll;
    for(int i=1;i<n;++i)
      for(int j=1;j<m;++j)
        if(__gcd(i,j)>1)
          ans-=(ll)(__gcd(i,j)-1)*(ll)(n-i)*(ll)(m-j)*2ll;
    cout<<ans<<endl;
    return 0;
}
时间: 2024-09-30 11:34:42

【排列组合】bzoj3505 [Cqoi2014]数三角形的相关文章

bzoj3505: [Cqoi2014]数三角形 [数论][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(

[bzoj3505 Cqoi2014] 数三角形 (容斥+数学)

传送门 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Sample Input 2 2 Sample Output 76 HINT 1<=m,n<=1000 Solution 首先思路肯定是随意三个点方案-三点共线方案 随意三个点方案随意求 主要求三点共线: 有个神奇的结论:节点坐标gc

bzoj3505 [Cqoi2014]数三角形

题目链接 先算在n*m个点中任选3个的方案数,再减去三点共线的方案数 我为什么要做这种水题?因为我很弱 1 #include<algorithm> 2 #include<iostream> 3 #include<cstdlib> 4 #include<cstring> 5 #include<cstdio> 6 #include<string> 7 #include<cmath> 8 #include<ctime>

【BZOJ3505】[Cqoi2014]数三角形 组合数

[BZOJ3505][Cqoi2014]数三角形 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和n. Output 输出一个正整数,为所求三角形数量. Sample Input 2 2 Sample Output 76 数据范围 1<=m,n<=1000 题解:显然要用补集法,我们只需要求出三点共线的方案数即可.方法是先枚举两端的点所形成的向

bzoj3505 / P3166 [CQOI2014]数三角形

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)$ 现在我们要算出三点共线的方案

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

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 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]数三角形 数论

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