一个组合问题

今天Mayuyu遇到了一道组合问题,题目描述如下。

题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4837

题意:给定一个的矩阵,在这个矩阵中任意选取3点,能构成多少个三角形?

分析:这个题明显是一个组合问题,利用容斥的思想。在的矩阵中一共有个点,那么有

选择,在这种选择中三点共线的情况是不合法的,不合法主要分两种情况。

(1)处于同一斜线上

枚举的矩形,那么对角线上的两点已经固定,在这两点中间选一个点即可,我们知道,给定两个整

数端点,直线上的整点个数为,减去已经固定的两

个,中间还有个整点,然后的矩形还可以移动,一共有

种情况,而每一个矩形有两个对角线,所以还要乘以2。

(2)处于同一竖直线或者水平线上

这种情况容易一点在每一个竖直线上选择3点,且每一列都是这样共有种情况。

同理,还有

代码:

#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;
typedef long long LL;

LL gcd(LL a,LL b)
{
    return b ? gcd(b,a%b):a;
}

LL num(LL n,LL m)
{
    LL ans = 0;
    for(int i=2;i<=n;i++)
    {
        for(int j=2;j<=m;j++)
            ans += (gcd(i,j) - 1) * (n - i + 1) * (m - j + 1) * 2;
    }
    return ans;
}

LL Work(LL n,LL m)
{
    LL t = (n + 1) * (m + 1);
    LL ans = t * (t - 1) * (t - 2) / 6;
    ans -= num(n,m);
    ans -= n * (n * n - 1) * (m + 1) / 6;
    ans -= m * (m * m - 1) * (n + 1) / 6;
    return ans;
}

int main()
{
    LL n,m;
    while(scanf("%lld%lld",&n,&m)!=EOF)
        printf("%lld\n",Work(n,m));
    return 0;
}

一个组合问题

时间: 2024-08-11 01:24:44

一个组合问题的相关文章

WPF DataGrid绑定一个组合列

WPF DataGrid绑定一个组合列 前台: <Page.Resources>        <local:InfoConverter x:Key="converter"></local:InfoConverter>    </Page.Resources> <DataGridTextColumn>                        <DataGridTextColumn.Binding>      

[???] 对一个组合题的胡乱证明

Problem 对于一个数轴,从原点走\(n(n \% 2 = 0)\)步回到原点的不同方案数. 向左走记为\(L\),向右走记为\(R\),当且仅当组成的走法序列\(\begin{Bmatrix}\overbrace{LRR......LRL}^n\end{Bmatrix}\)不同时,认为是两种不同方案. Solution 答案 \(C_{n}^{\frac{n}{2}}\) 解法 考虑对决策进行划分组合来统计方案数. 记左右走法各为一种决策元素,记向左决策元素为\(L\),向右决策元素为\(

js 排列 组合 的一个简单例子

最近工作项目需要用到js排列组合,于是就写了一个简单的demo. 前几天在网上找到一个写全排列A(n,n)的code感觉还可以,于是贴出来了, 排列的实现方式: 全排列主要用到的是递归和数组的插入 比如12的全排列,首先把1拿出来放到elementCur,再获取由1组成的数组[2],然后在循环把1插入到0,1的位置后再返回1,2][2,1] 如果是123那么首先获取23的全排列[2,3][3,2],然后在插入1,[1,2,3][2,1,3][2,3,1][1,3,2][3,1,2][3,2,1]

斐波纳契数之组合

斐波纳契数之组合 Time Limit: 1000 MS Memory Limit: 65535 K Total Submit: 145(66 users) Total Accepted: 83(65 users) Rating: Special Judge: No Description 斐波那契数列是这么定义的:F0 = 1, F1 = 1, F2 = F1 + F0,··· Fn = Fn-1 + Fn-2(n>=2),对于每一项,它们都是斐波那契数. 现在给出一个整数d,求一个组合使得a

Hyperledger Fabric 建立一个简单网络

p { margin-bottom: 0.25cm; line-height: 120% } Building you first network 网络结构: 2个Orgnizations(每个Org包含2个peer节点)+1个solo ordering service 打开fabric-sample下的示例first-network p { margin-bottom: 0.25cm; line-height: 120% } 其中byfn.sh为启动这个网络的启动脚本,启动脚本中除建立一个包含

python内置的一个好玩的函数-zip,并且巧妙的实现按概率随机生成有限个数的字符串。

python有一个比较有意思的内置函数-----zip,可以把传入的两组list进行一个组合变形,再输出子元素为tuple的list,不过变形的方式比较抽象. 举个例子: A=[1,2,3,4,5,6] B=['a','b','c','d'] v1=zip(A,B) v1的结果为: [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')] 比较直观的理解就是,A和B是两道拉链上的扣子,生成的list的子tuple,每一组tuple就是一对扣好了的扣子,并且从每组list的

佩特来项目经验小集合(2)___组合查询存储过程,报错 &amp;quot;varchar JBID=&amp;#39;&amp;#39; 转换成数据类型 int 时失败&amp;quot;

今天写一个组合查询的存储过程遇到这样一个问题:在将 varchar 值 'SELECT * FROM View_DLS_WXJD_Customer WHERE 1=1 and JBID ='' 转换成数据类型 int 时失败.错误详情如图所看到的: 经百度:字符串变量和整型变量连接不能用+连接. 于是我採用cast()函数将DLSJB这个整型变量转换成字符串,这样问题就攻克了. 正确代码例如以下所看到的: ALTER PROCEDURE [dbo].[Proc_SH_WXJDList] @DH

主键,组合主键,聚集索引,非聚集索引,唯一索引

前言: 基于Oracle数据库谈谈索引们的问题,以及在什么情况下使用什么索引, 组合主键,怎么根据实际业务需求来定制自己的索引,主键的应用,来提升系统的性能. 1:主键? 在表中唯一的,也是聚集索引.作用于快速查询.该列唯一. Java代码 复制代码 收藏代码 1.ID NUMBER(38,0) PRIMARY KEY NOT NULL, 2:组合主键? 在表中以多个字段组成在表中是唯一的,也是聚集索引.作用于快速查询.该组合列唯一. Java代码 复制代码 收藏代码 1.CREATE TABL

lightoj 1102 - Problem Makes Problem (组合+逆元)

题意: 求n有顺序的划分为k个数的方案数. 思路: 显然这个就是一个组合公式,隔板法.可以把问题转化为x1+x2+-..xk = n 这个多元一次方程上.然后这个解就是C(n+k-1,k-1) 这道题n,k范围都是1e6. 我们可以预处理出阶乘,然后求对应的组合数,注意这里需要取Mod,用下逆元就好啦. 参考code: /* #pragma warning (disable: 4786) #pragma comment (linker, "/STACK:0x800000") */ #i