洛谷[P3799 妖梦拼木棒] {暴力枚举}

题目背景

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

题目描述

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

答案对 10910^9109+7 取模。

输入格式

第一行一个整数 n。

第二行 n个整数,第 i 个整数 ai代表第 i 根木棒的长度。

输出格式

一行一个整数代表答案。

输入输出样例

输入
4
1 1 2 2
输出
1

说明/提示

数据规模与约定
对于 30% 的数据,保证 n≤5×10310^3103。
对于 100% 的数据,保证 1≤n≤10510^5105 ,0≤ai ≤5×10310^3103。

解题思路

1、首先计算每一个数字的出现个数,有点映射的思想。
2、然后如果一个数字x出现大于等于两次则说明这个数字可能作为正三角形的两条边。
3、然后再假设j是选择的四个数中除相等的两个数之外较小的那个数,则其一定小于等于(x/2),此时另外一个数字就是x-j。然后就进行比遍历,寻找满足条件的结果,计算可能的值。

注意

正三角形就是等边三角形。

取模运算时不要使用+=,要写成正常形式,否则会溢出。

完整代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
const int mod=1e9+7;
int a[maxn];
int sum[maxn];int C(int x,int c)
{if(c==1) return x;else return (x*(x-1)/2)%mod;
}
int main()
{int m;int maxa;scanf("%d",&m);for(int i=1;i<=m;i++){scanf("%d",&a[i]);sum[a[i]]++;maxa=max(maxa,a[i]);//找出最大的那个数,作为之后循环的边界 }int ans=0;for(int i=1;i<=maxa;i++) {if(sum[i]>=2)//如果个数大于两个说明可以选择其中的两个作为正三角形的两边 {int fang=C(sum[i],2);for(int j=1;j<=i/2;j++)//强制使得j是小的那一部分 {if(j!=i-j&&sum[j]>=1&&sum[i-j]>=1){ans=(ans+fang*C(sum[j],1)*C(sum[i-j],1)%mod)%mod;}if(j==i-j&&sum[j]>=2){ans=(ans+fang*C(sum[j],2)%mod)%mod;//注意相加不能使用+= }}}}printf("%d",ans);return 0;}

洛谷[P3799 妖梦拼木棒] {暴力枚举} 奋斗的珂珂~相关推荐

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

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

  2. 【题解】【算法】- 洛谷 - P3799 妖梦拼木棒(组合数学)

    题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 n 根木棒,现在从中选 4 根,想要组成一个正三角形,问有几种选法? 答案对 109 + 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. [luogu P3799] 妖梦拼木棒

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

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

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

  9. 洛谷 P3797 妖梦斩木棒 解题报告

    P3797 妖梦斩木棒 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了一支非常长的木棒,妖梦把它们切成了等长的\(n\)段.现在这个木棒可以看做 ...

最新文章

  1. Hive-1.2.0学习笔记(一)安装配置
  2. php上传报文,PHP-02.文件上传、php保存/转移上传的文件、常见的网络传输协议、请求报文及属性、响应报文及属性...
  3. Maven 学习 (0) Maven 简介
  4. oracle的排序分页,oracle 排序分页 高效sql语句
  5. 【itext学习之路】--2.设置pdf的一些常用属性
  6. 如何用php写表单中的年月日,php写的日历程序 - adamboy的个人页面 - OSCHINA - 中文开源技术交流社区...
  7. .net MVC在服务端代码输出html字符串
  8. 简单梳理帆软报表即决策系统的登录步骤 二
  9. 点云数据增强及预处理
  10. 小白简单式安装VM虚拟机
  11. 2012年股市楼市泡沫终将破灭
  12. 明日书苑:史上书法字体分类最全(收藏版)
  13. 玩转亚马逊 AWS IoT(3): SpringBoot 2.7 集成 AWS IoT 服务
  14. ARM与RISC-V架构有哪些区别?
  15. PaperFree-论文查重
  16. 东方证券首席架构师樊建:企业微服务架构转型实践
  17. python爬取网页内容post_python爬虫之使用POST抓取网页内容
  18. 灯光通信:二维码时代将终结!
  19. 关于路缘石成型机管理你想象能有几多种变化
  20. 美通企业日报 | 亚马逊AWS三项举措推进量子计算技术;海航渝富重组西部航空...

热门文章

  1. OSChina 周一乱弹 —— 理发师小姐姐的魔法
  2. 实验室信息管理系统(LIS)的一些个人总结
  3. 户外顶级装备---安全套和卫生巾!(转载)
  4. 虚拟蜜罐:从信息模拟到实现虚拟蜜罐技术
  5. 程序员快速阅读,绝对不是神话
  6. 酶切位点分析(the analysis of enzyme sites)
  7. 关闭Windows Ctrl+Alt+Delete来解锁睡眠
  8. 基金:实战,连涨7天,8天到底抛还留?爱吹牛的赵吹吹又来了
  9. Git剑客学习笔记-待完善
  10. WS协议—介绍及原理