一个组合问题

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

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

 

题目: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;
}

 

 

 

【LINGO】简单的投资组合模型 【LINGO】简单的投资组合模型。 阅读详情

相关推荐

投资组合问题

目录 基本的投资组合模型 存在无风险资产时的投资组合模型 考虑交易成本的投资组合模型 利用股票指数简化投资组合模型 其它目标下的投资组合模型 基本的投资组合模型 例5 美国某三种股票( A ,B , C)12年(1943-1954)的价格(已经包括了分红在内)每年的增长情况如表6所示(表中还给出了相应年份的500种股票的价格指数 的增长情况)。例如,表中第一个数据1.300的含...

冷月无声的博客 2万+

一个排列组合问题

给定六个数字:1、2、3、3、5、6,试编程求出满足下述要求的,用这六个数字组成的6位数的个数: 1) 两个数字3不能相邻,例如653321不允许 2) 数字5不能在第5位,例如132356不允许  我写了个运用穷举法进行筛选的代码,呵呵,感觉实现得很不优雅…… public class Test { public static void main(String[] a

tanwen1234的专栏 865

投资

Shellcode.Cool! 423

一个关于组合数的问题

1. 题目来源 未解之谜俱乐部 import java.util.ArrayList; import java.util.List; /** *@date 2010-5-3 下午05:50:30 *@author dycc *@file NumberMystery.java *@desc 给定集合 A = [31,37,8,81,34,39,56,5,41,2...

dyccsxg的专栏 205

一个排列组合的分组问题

请问高手:将n个人分为m组,共有几种分法?(1

fenglingdemengyi的专栏 1307

PHP的排列组合问题 分别从每一个集合中取出一个元素进行组合,问有多少种组合?...

首先说明这是一个数学的排列组合问题C(m,n) = m!/(n!*(m-n)!) 比如:有集合('粉色','红色','蓝色','黑色'),('38码','39码','40码'),('大号','中号') 分别从每一个集合中取出一个元素进行组合,问有多少种组合?解:C(4,1) * C(3,1) * C(2,1) = (4!/(1!*(4-1)!)) * (3!/(1!*(3-1)!)) * (2!...

weixin_30722589的博客 334

从n个数组中任意选取一个元素的所有组合的Java实现(组合问题

在這裡,我們用遞歸的思想,對於數據[1, 3, 4]; [2, 5]; [6, 7];我們可以 1.將1,2,6壓入棧中,然後輸出棧中所有元素,之後彈出6 2.壓入7,輸出棧中所有元素,之後彈出7 3.彈出2,壓入5,再壓入6,然後輸出棧中所有元素,之後彈出6 4.壓入7,輸出棧中所有元素,之後彈出7 以此類推,即可得到所有組合。 void get_result_in_vector

yumengkk的专栏 4677

Java 一个关于魔兽世界5人小队的组合问题

WOW里共有11个职业,分别是ZS、QS、DK、D、SM、MS、FS、SS、DZ、LR、WS。其中ZS、DK能T能DPS;QS、D、WS能T能N能DPS;SM、MS能N能DPS;FS、DZ、LR、SS只能DPS。现将组成个5人队,队伍里要有1T、1N、3DPS,问:共有几种职业组合

worldwar1114的专栏 1188

组合问题一个

<br />100可以表示成多少个正整数之和?<br />f(m,n,p)表示n个不小于p的正整数之后为m的组合数<br />则显然有边界条件<br />f(m,n,p)=1,当n=1且m>=p<br />f(m,n,p)=0,当m<p<br />f(m,n,p)=sum(f(m-i,n-1,p+i), i>=0; p+i <=m-i, m-i >=n-1)<br />若F(m)表示m可以表示成若干正整数之和的组合数,则有<br />F(m)=sum(f(m,i,1), i>=1, i<=m)<br /> 

无心云 864

python 一个组合问题

一个函数 f(X)=X2f(X)=X2。你还将获得KK个列表,每个列表包含NN个元素。你需要从每个列表中,使下面的等式结果XiXi​表示第ii个列表的某个元素。求出获得的最大值SS。表示模运算符。

laocooon的博客 223

一个排列组合问题的解法

给出N个集合(例如{1}、{2,5}、{3,5},N = 3),若在每个集合中每次取一个数,组成一个新的集合,如何求出所有这样的集合呢(如上面例子的结果为{1,2,3} 、{1,2,5}、{1,5,3}、{1,5,5})?下面给出了解决该问题的Matlab递归算法实现。

为之,则难者亦易矣;不为,则易者亦难矣。 2208

一个简单组合问题的算法

今天在 leetcode 上刷题的时候,刷到这样一道题,下面是这道题的链接,感兴趣的小伙伴也可以去尝试一下。https://leetcode.cn/problems/combinations/题目大概就是:给定两个整数n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。乍一看这道题目,想到的就是一个个尝试任何一种可能,然后想到使用多个 for 循环,但是仔细一想,for 循环的个数是和 k 相等的,而 k 是一个变量,无法得知,这样也就不好写这么一个多重循环。最后看了题解,要用迭代法。下面记录

m0_37657276的博客 198

Bin Packing问题,又称装箱问题,是一个经典的组合优化问题

Bin Packing问题,又称装箱问题,是一个经典的组合优化问题。在这个问题中,我们有一组不同大小的物品(通常称为“项目”)和一组固定容量的容器(通常称为“箱子”)。目标是将这些项目尽可能高效地放入箱子中,以最小化使用的箱子数量或最大化每个箱子的空间利用率。在实际应用中,我们需要根据具体问题补充选择、交叉、变异等核心操作,并调整参数以获得更好的性能。为了简化问题,我们假设项目和箱子都是一维的,即只有长度属性。Bin Packing问题一个NP-hard问题,意味着在多项式时间内找到最优解是非常困难的。

MrLi的博客 2005

一个货币组合问题

今年五月份的时候,宿舍的人找实习,笔试碰到一道货币组合问题,是这样子的: 现在我们有1元、2元、5元、10元、20元和50元,每种面值都有若干张。请问,如果要用这些货币组成100元的话,有多少种方法? 他们笔试回来,就讲了这个问题。当时本菜就写了个暴力的方法(反正计算机有这么大的算力……) 1 #include <cstdio> 2 #include <...

weixin_34261739的博客 226

一个组合问题解决的很巧妙

/**  * 组合问题,经典算法  * 问题描述:找出从自然数1,2,3.....n中任取r个数的组合.例如n=5,r=3的所有组合为  * (1)543 (2)542 (3)541 (4)532 (5)531 (6)521 (7)432 (8)431 (9)421 (10)321   *  利用递归思想将求从n个数中去r个数的组合转化为求n-1自然数内r-1个数的组合。  * @param...

乡间学者博客 291

组合还是继承,这是一个问题

刚刚接触模式或者学习模式的人,经常会有这样的问题,为什么模式是成功的呢?很多人都会说模式是经验的积累,当然是正确的。可是经验为什么偏偏就证明了这种模式是正确的呢?这其中起用作的就是面向对象的基本原则。正是因为模式都或多或少的符合了面向对象的基本原则,所以模式才成为我们面向对象的设计和编码过程中不败的法则。那么什么是面向对象的基本原则呢?这就是我们将要一一讲到的问题。 单纯的讲到一个个的原则,就

熊熊乐园-JAVA篇 817
上一篇: Python解决中文乱码问题
下一篇: 数论vs图论
ACHelloWorld
博客等级 码龄14年 35粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值