洛谷[P3799 妖梦拼木棒] {暴力枚举} 奋斗的珂珂~
洛谷[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 妖梦拼木棒] {暴力枚举} 奋斗的珂珂~相关推荐
- 洛谷 P3799 妖梦拼木棒【枚举/组合数学】
题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 nnn 根木棒,现在从中选 444 根,想要组成一个正三角形,问有几种选法? 答案对 109+710^9+7109+7 ...
- 【题解】【算法】- 洛谷 - P3799 妖梦拼木棒(组合数学)
题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 n 根木棒,现在从中选 4 根,想要组成一个正三角形,问有几种选法? 答案对 109 + 7 取模. 输入格式 第一行一 ...
- 洛谷-P3799 妖梦拼木棒
题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 nn 根木棒,现在从中选 44 根,想要组成一个正三角形,问有几种选法? 答案对 10^9+7109+7 取模. 输入格 ...
- 洛谷P3799 妖梦拼木棒
题目链接 题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有n根木棒,现在从中选4根,想要组成一个正三角形,问有几种选法? 输入格式: 第一行一个整数n 第二行n个整数,a ...
- 洛谷P3799 妖梦拼木棒 题解
//简单的思路:四根必有两根相同,所以咱们就先选两根组合成第三根,确定另外相同的两根的长度 //分为两种情况,一.预选两根相同长度.二.预选两根不同长度. //所有情况是预选*(确定的另外两根) #i ...
- 洛谷 P3799 妖梦拼木棒
题目 这道题主要考组合数学,一开始我没注意数据范围,傻乎乎地模拟,结果复杂度爆炸10个TLE.这道题是算出来的. 思路是用一个栈把相同长度个数超过2的木棍用栈保存下来,同时用一个数组存下所有长度木棍的 ...
- [luogu P3799] 妖梦拼木棒
[luogu P3799] 妖梦拼木棒 题目描述 解决过程 思路 代码 感想 题目描述 点击此处查看题目描述 解决过程 暴力不多阐述,很显然是无法AC的 解决此题需要用到组合数 思路 这道题要求拼成等 ...
- P3799 妖梦拼木棒——枚举+组合数学
妖梦拼木棒 题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 nnn 根木棒,现在从中选 444 根,想要组成一个正三角形,问有几种选法? 答案对 109+710^9+7 ...
- 洛谷 P3797 妖梦斩木棒 解题报告
P3797 妖梦斩木棒 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了一支非常长的木棒,妖梦把它们切成了等长的\(n\)段.现在这个木棒可以看做 ...
最新文章
- Hive-1.2.0学习笔记(一)安装配置
- php上传报文,PHP-02.文件上传、php保存/转移上传的文件、常见的网络传输协议、请求报文及属性、响应报文及属性...
- Maven 学习 (0) Maven 简介
- oracle的排序分页,oracle 排序分页 高效sql语句
- 【itext学习之路】--2.设置pdf的一些常用属性
- 如何用php写表单中的年月日,php写的日历程序 - adamboy的个人页面 - OSCHINA - 中文开源技术交流社区...
- .net MVC在服务端代码输出html字符串
- 简单梳理帆软报表即决策系统的登录步骤 二
- 点云数据增强及预处理
- 小白简单式安装VM虚拟机
- 2012年股市楼市泡沫终将破灭
- 明日书苑:史上书法字体分类最全(收藏版)
- 玩转亚马逊 AWS IoT(3): SpringBoot 2.7 集成 AWS IoT 服务
- ARM与RISC-V架构有哪些区别?
- PaperFree-论文查重
- 东方证券首席架构师樊建:企业微服务架构转型实践
- python爬取网页内容post_python爬虫之使用POST抓取网页内容
- 灯光通信:二维码时代将终结!
- 关于路缘石成型机管理你想象能有几多种变化
- 美通企业日报 | 亚马逊AWS三项举措推进量子计算技术;海航渝富重组西部航空...