题目背景

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

题目描述

有 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 妖梦拼木棒(组合数学)相关推荐

  1. 洛谷[P3799 妖梦拼木棒] {暴力枚举} 奋斗的珂珂~

    洛谷[P3799 妖梦拼木棒] {暴力枚举} 题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 n 根木棒,现在从中选 4 根,想要组成一个正三角形,问有几种选法? 答案 ...

  2. 洛谷 P3799 妖梦拼木棒【枚举/组合数学】

    题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 nnn 根木棒,现在从中选 444 根,想要组成一个正三角形,问有几种选法? 答案对 109+710^9+7109+7 ...

  3. 洛谷-P3799 妖梦拼木棒

    题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 nn 根木棒,现在从中选 44 根,想要组成一个正三角形,问有几种选法? 答案对 10^9+7109+7 取模. 输入格 ...

  4. 洛谷P3799 妖梦拼木棒

    题目链接 题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有n根木棒,现在从中选4根,想要组成一个正三角形,问有几种选法? 输入格式: 第一行一个整数n 第二行n个整数,a ...

  5. 洛谷P3799 妖梦拼木棒 题解

    //简单的思路:四根必有两根相同,所以咱们就先选两根组合成第三根,确定另外相同的两根的长度 //分为两种情况,一.预选两根相同长度.二.预选两根不同长度. //所有情况是预选*(确定的另外两根) #i ...

  6. 洛谷 P3799 妖梦拼木棒

    题目 这道题主要考组合数学,一开始我没注意数据范围,傻乎乎地模拟,结果复杂度爆炸10个TLE.这道题是算出来的. 思路是用一个栈把相同长度个数超过2的木棍用栈保存下来,同时用一个数组存下所有长度木棍的 ...

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

    题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有n根木棒,现在从中选4根,想要组成一个正三角形,问有几种选法? 输入输出格式 输入格式: 第一行一个整数n 第二行n个整数 ...

  8. [luogu P3799] 妖梦拼木棒

    [luogu P3799] 妖梦拼木棒 题目描述 解决过程 思路 代码 感想 题目描述 点击此处查看题目描述 解决过程 暴力不多阐述,很显然是无法AC的 解决此题需要用到组合数 思路 这道题要求拼成等 ...

  9. P3799 妖梦拼木棒——枚举+组合数学

    妖梦拼木棒 题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 nnn 根木棒,现在从中选 444 根,想要组成一个正三角形,问有几种选法? 答案对 109+710^9+7 ...

最新文章

  1. Java 10 实战第 1 篇:局部变量类型推断
  2. CentOS7 install google-chrome-stable
  3. c语言删除文件remove_Python中的文件和目录操作
  4. 【Java基础】RTTI与反射之Java
  5. 在React.js中执行反跳
  6. php 怎么写配置文件,在PHP中如何把数组写成配置文件
  7. python 编译成exe vmp加密_[分享]某vmp壳原理分析笔记
  8. 计算机如何驱动无线网络,笔记本电脑无线网卡驱动怎么安装?
  9. 李氏第二法分析稳定性matlab,9-4李雅普诺夫稳定性分析2010.ppt
  10. 设计模式-Builder模式详解
  11. android tf卡 修复工具,如何修复/格式化损坏的安卓手机SD卡-万兴恢复专家
  12. 论文笔记——Scaling Up Your Kernels to 31x31: Revisiting Large Kernel Design in CNNs
  13. window.print打印指定区域
  14. 关于有限元应力结果精度的几点讨论
  15. c++如何画实心的箭头
  16. Emacs - 维基百科,自由的百科全书
  17. Redis 复制、Sentinel的搭建和原理说明(转)
  18. 基于php校园网站的毕业设计论文,基于php技术的校园网站的设计与实现_毕设论文.doc...
  19. 2008大连国际沙滩文化节将在金石滩举行
  20. Cocos2d-x C++版仿《王者之剑》实现(v1.0.1版)

热门文章

  1. ipad iphone开发_如何查看您曾经在iPhone或iPad上下载的所有应用程序
  2. SQL语句中批量插入
  3. Python网络编程(06)----MySQL8.0介绍--01(使用command命令创建数据库以及数据表)
  4. 计算机科学的动物比喻,描写动物的比喻句
  5. Mendix Studio Pro 9.6 发布:带来全新的Mendix体验
  6. Kolin学习笔记十-kotlin与java互操作
  7. fedora 软件安装
  8. [LintCode] Delete Node in the Middle of Singly Linked List 在单链表的中间删除节点
  9. 小程序canva手写板
  10. 云灾备方案,让企业无忧数据灾难