【题解】【算法】- 洛谷 - P3799 妖梦拼木棒(组合数学)
题目背景
上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来。
题目描述
有 n 根木棒,现在从中选 4 根,想要组成一个正三角形,问有几种选法?
答案对 109 + 7 取模。
输入格式
第一行一个整数 n。
第二行 n 个整数,第 i 个整数 ai 代表第 i 根木棒的长度。
输出格式
一行一个整数代表答案。
输入输出样例
输入 #1复制
4
1 1 2 2
输出 #1复制
1
说明/提示
数据规模与约定
- 对于30% 的数据,保证 n ≤ 5 × 103。
- 对于 100% 的数据,保证 1 ≤ n ≤ 105,0 ≤ ai ≤ 5 × 103。
思路
暴力即可,详解看代码
AC代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int mod = 1e9 + 7;
const int N = 1e5 + 5;
int n, maxj, t, res;
//sum数组存储的是不同长度的木棍的数量,下标是长度,大小是数量
int sum[N];
int main(void)
{cin >> n;for(int i = 0; i < n; i ++){//t相当于中间变量cin >> t;//类似桶排序存入数组中,简化问题sum[t] ++;//找到最长的那个木棍maxj = max(maxj, t);}//i从2开始即可,长度为1的木棍没意义,不可能分成两个木棍for(int i = 2; i <= maxj; i ++){//如果木棍数大于等于2,即可以有两个相等的木棍组成正三角形的两个边if(sum[i] >= 2){//找到另外一边的其中一根木棍,长度大于i / 2也没有什么意义,因为另外一根木棍可以通过i - j求得它的长度for(int j = 1; j <= i / 2; j ++){int k = i - j;//两根木棍长度一样if(k == j)//类似排列组合,第三边两根长度一样的木棍,那么只需要在这种长度的木棍里选两根,组成另外两边的两根一种长度的木棍里选两根就可res += (sum[k] * (sum[k] - 1) / 2 % mod)* (sum[i] * (sum[i] - 1) / 2 % mod);else//类似排列组合,第三边的长度不一样的木棍,其中一种长度的木棍里选一根木棍,另一种长度的木棍里选一根木棍,组成另外两边的两根一种长度的木棍里选两根就可res += (sum[k] % mod) * (sum[j] % mod) * (sum[i] * (sum[i] - 1) / 2 % mod);res %= mod;}}}cout << res << endl;return 0;
}
【题解】【算法】- 洛谷 - P3799 妖梦拼木棒(组合数学)相关推荐
- 洛谷[P3799 妖梦拼木棒] {暴力枚举} 奋斗的珂珂~
洛谷[P3799 妖梦拼木棒] {暴力枚举} 题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 n 根木棒,现在从中选 4 根,想要组成一个正三角形,问有几种选法? 答案 ...
- 洛谷 P3799 妖梦拼木棒【枚举/组合数学】
题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 nnn 根木棒,现在从中选 444 根,想要组成一个正三角形,问有几种选法? 答案对 109+710^9+7109+7 ...
- 洛谷-P3799 妖梦拼木棒
题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 nn 根木棒,现在从中选 44 根,想要组成一个正三角形,问有几种选法? 答案对 10^9+7109+7 取模. 输入格 ...
- 洛谷P3799 妖梦拼木棒
题目链接 题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有n根木棒,现在从中选4根,想要组成一个正三角形,问有几种选法? 输入格式: 第一行一个整数n 第二行n个整数,a ...
- 洛谷P3799 妖梦拼木棒 题解
//简单的思路:四根必有两根相同,所以咱们就先选两根组合成第三根,确定另外相同的两根的长度 //分为两种情况,一.预选两根相同长度.二.预选两根不同长度. //所有情况是预选*(确定的另外两根) #i ...
- 洛谷 P3799 妖梦拼木棒
题目 这道题主要考组合数学,一开始我没注意数据范围,傻乎乎地模拟,结果复杂度爆炸10个TLE.这道题是算出来的. 思路是用一个栈把相同长度个数超过2的木棍用栈保存下来,同时用一个数组存下所有长度木棍的 ...
- P3799 妖梦拼木棒 (组合数学)
题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有n根木棒,现在从中选4根,想要组成一个正三角形,问有几种选法? 输入输出格式 输入格式: 第一行一个整数n 第二行n个整数 ...
- [luogu P3799] 妖梦拼木棒
[luogu P3799] 妖梦拼木棒 题目描述 解决过程 思路 代码 感想 题目描述 点击此处查看题目描述 解决过程 暴力不多阐述,很显然是无法AC的 解决此题需要用到组合数 思路 这道题要求拼成等 ...
- P3799 妖梦拼木棒——枚举+组合数学
妖梦拼木棒 题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 nnn 根木棒,现在从中选 444 根,想要组成一个正三角形,问有几种选法? 答案对 109+710^9+7 ...
最新文章
- Java 10 实战第 1 篇:局部变量类型推断
- CentOS7 install google-chrome-stable
- c语言删除文件remove_Python中的文件和目录操作
- 【Java基础】RTTI与反射之Java
- 在React.js中执行反跳
- php 怎么写配置文件,在PHP中如何把数组写成配置文件
- python 编译成exe vmp加密_[分享]某vmp壳原理分析笔记
- 计算机如何驱动无线网络,笔记本电脑无线网卡驱动怎么安装?
- 李氏第二法分析稳定性matlab,9-4李雅普诺夫稳定性分析2010.ppt
- 设计模式-Builder模式详解
- android tf卡 修复工具,如何修复/格式化损坏的安卓手机SD卡-万兴恢复专家
- 论文笔记——Scaling Up Your Kernels to 31x31: Revisiting Large Kernel Design in CNNs
- window.print打印指定区域
- 关于有限元应力结果精度的几点讨论
- c++如何画实心的箭头
- Emacs - 维基百科,自由的百科全书
- Redis 复制、Sentinel的搭建和原理说明(转)
- 基于php校园网站的毕业设计论文,基于php技术的校园网站的设计与实现_毕设论文.doc...
- 2008大连国际沙滩文化节将在金石滩举行
- Cocos2d-x C++版仿《王者之剑》实现(v1.0.1版)
热门文章
- ipad iphone开发_如何查看您曾经在iPhone或iPad上下载的所有应用程序
- SQL语句中批量插入
- Python网络编程(06)----MySQL8.0介绍--01(使用command命令创建数据库以及数据表)
- 计算机科学的动物比喻,描写动物的比喻句
- Mendix Studio Pro 9.6 发布:带来全新的Mendix体验
- Kolin学习笔记十-kotlin与java互操作
- fedora 软件安装
- [LintCode] Delete Node in the Middle of Singly Linked List 在单链表的中间删除节点
- 小程序canva手写板
- 云灾备方案,让企业无忧数据灾难