P3799 妖梦拼木棒(组合数学)

这篇具有很好参考价值的文章主要介绍了P3799 妖梦拼木棒(组合数学)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

P3799 妖梦拼木棒

                                                                                                  (学习自用)

提交65.01k

通过15.35k

时间限制1.00s

内存限制125.00MB

题目背景

上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来。

题目描述

有 n 根木棒,现在从中选 44 根,想要组成一个正三角形,问有几种选法?

答案对 109+7109+7 取模。

输入格式

第一行一个整数 n。

第二行往下 n 行,每行 11 个整数,第 i 个整数 ai​ 代表第 i 根木棒的长度。

输出格式

一行一个整数代表答案。

输入输出样例

输入 #1复制

4 
1
1
2
2

输出 #1复制

1

说明/提示

数据规模与约定
  • 对于 30%30% 的数据,保证 n≤5×103。
  • 对于 100%100% 的数据,保证 1≤n≤105,1≤ai​≤5×103。
    #include <bits/stdc++.h>
    using namespace std;
    const int N=5e3+7;
    const int M=1e9+7;
    int num[N];
    
    long long C(int num, int k)//组合数
    {
    	return k == 1 ? num : num * (num - 1) / 2;
    }
    
    int main() {
    	int n,a,ans=0,ma=0;
    	cin>>n;
    	for(int i=1;i<=n;i++) {
    		cin>>a;
    		ma=max(ma,a);
    		num[a]++;
    	}
    	for(int i=2;i<=ma;i++) {//从2开始,因为要选四条,如果等于1不可能用四个1拼成正三角形 
    		if(num[i]>=2) {//至少要有两个,剩下一条边拼起来等于这两条边的长 
    			for(int j=1;j<=i/2;j++) {
    				if(i-j==j&&num[j]>=2)
    					ans+=C(num[i],2)*C(num[j],2)%M;//边的总数里选两个,拼起来等于边的i-j边总数选两个
    				 
    				else if(i - j != j && num[j] >= 1 && num[i-j] >= 1)
    					ans+=(C(num[i],2)*C(num[j],1))%M*C(num[i-j],1)%M;
    					//因为没有每次取模错了好几个测试点。。 
    			}
    		}
    		ans%=M;
    	}
    	cout<<ans<<endl; 
    	return 0;
    }

    看了这位劳斯的题解:

  • P3799 妖梦拼木棒——枚举+组合数学-CSDN博客P3799 妖梦拼木棒(组合数学),算法文章来源地址https://www.toymoban.com/news/detail-790105.html

到了这里,关于P3799 妖梦拼木棒(组合数学)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ACM组合数学 | 错排公式】写信

    题目链接:https://ac.nowcoder.com/acm/contest/54484/B 题意很简单,但是数据范围偏大。 首先来推导一下错排公式: [D(n) = n!sum_{k=0}^{n}frac{(-1)^k}{k!}] 设一个函数: [S_i表示一个排列中p_i = i的方案数] 那么我们可以知道: [D(n) = n! - |cup_{i=1}^{n}S_i|] 这个表示 所有方案数 减去 至少有

    2023年04月17日
    浏览(37)
  • 组合数学——Min-Max容斥

    Min-Max 容斥,即 $$max(S)=sum_{Tin S,Tneqemptyset}(-1)^{|T|-1}min(T)$$ 接下来证明上面那个式子是对的。定义 (S) 中共有 (N) 个元素,由大到小分别为 (s_1,s_2,dots,s_N) , (T_i) 为所有 (S) 大小为 (i) 的子集。 所有元素都大于 (s_i) 且大小为 (j) 的子集有 (tbinom{i-1}{j}) 个;则最

    2024年04月08日
    浏览(38)
  • 【组合数学】【动态规划】【前缀和】1735生成乘积数组的方案数

    【动态规划】【状态压缩】【2次选择】【广度搜索】1494. 并行课程 II 动态规划汇总 C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 组合数学 给你一个二维整数数组 queries ,其中 queries[i] = [ni, ki] 。第 i 个查询 queries[i] 要求构造长度为 ni 、每个

    2024年02月19日
    浏览(50)
  • 青蛙跳台阶(C语言数学排列组合公式求解法)

    题目:从前有一只青蛙他想跳台阶,有n级台阶,青蛙一次可以跳1级台阶,也可以跳2级台阶;问:该青蛙跳到第n级台阶一共有多少种跳法。 当只有跳一级台阶的方法跳时,总共跳n步,共有1次跳法                                 当用了一次跳二级台阶的方法跳时,总共

    2024年02月08日
    浏览(40)
  • 【深度优先搜索】【组合数学】【动态规划】1467.两个盒子中球的颜色数相同的概率

    【动态规划】【字符串】【行程码】1531. 压缩字符串 动态规划汇总 深度优先搜索 组合数学 桌面上有 2n 个颜色不完全相同的球,球上的颜色共有 k 种。给你一个大小为 k 的整数数组 balls ,其中 balls[i] 是颜色为 i 的球的数量。 所有的球都已经 随机打乱顺序 ,前 n 个球放入第

    2024年02月21日
    浏览(37)
  • 基于组合优化的3D家居布局生成看千禧七大数学难题之NP问题

    本文探讨了运筹学和组合优化方法在3D家居布局生成中的应用,并调研了AI生成3D场景布局的最新方法。文中结合了家居家装业务的实际应用场景,从算法建模和计算复杂度的角度上阐述了室内设计的布局问题中存在的难点,以及如何用简化和近似的思想来建模3D布局生成问题

    2024年02月07日
    浏览(35)
  • LeetCode 1359. Count All Valid Pickup and Delivery Options【动态规划,组合数学】1722

    本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,

    2024年02月09日
    浏览(40)
  • 2018-2019 ACM-ICPC, Asia Nanjing Regional Contest G. Pyramid(组合数学 计数)

    题目 t(t=1e6)组样例,每次给定一个n(n=1e9),统计边长为n的上述三角形的等边三角形个数 其中等边三角形的三个顶点,可以在所有黑色三角形白色三角形的顶点中任取, 答案对1e9+7取模 思路来源 申老师 oeis A000332 Solution to Problem #3 题解 oeis打一下前四项的表,发现是C(n,4),并且

    2024年02月07日
    浏览(34)
  • Educational Codeforces Round 157 (Rated for Div. 2) F. Fancy Arrays(容斥+组合数学)

    题目 称一个长为n的数列a是fancy的,当且仅当: 1. 数组内至少有一个元素在[x,x+k-1]之间 2. 相邻项的差的绝对值不超过k,即 t(t=50)组样例,每次给定n(1=n=1e9),x(1=x=40), 求fancy的数组的数量,答案对1e9+7取模 思路来源 灵茶山艾府群 官方题解 题解 看到 至少 的字眼,首先想到容斥,

    2024年02月05日
    浏览(37)
  • 2023年MathorCup 高校数学建模挑战赛-A 题 量子计算机在信用评分卡组合优化中的应用-思路详解(模型代码答案)

    运筹优化类题目,不同于目标规划,该题限制了必须使用量子退火算法QUBO来进行建模与求解。本身题目并不难,但是该模型较生僻,给出的参考文献需要耗费大量时间去钻研。建议擅长运筹类题目且建模能力强的队伍选择。 问题 1 :在 100 个信用评分卡中找出 1 张及其对应阈

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包