洛谷-P3799 妖梦拼木棒
题目背景
上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来。
题目描述
有 nn 根木棒,现在从中选 44 根,想要组成一个正三角形,问有几种选法?
答案对 10^9+7109+7 取模。
输入格式
第一行一个整数 nn。
第二行 nn 个整数,第 ii 个整数 a_iai 代表第 ii 根木棒的长度。
输出格式
一行一个整数代表答案。
输入输出样例
输入 #1复制
4 1 1 2 2
输出 #1复制
1
说明/提示
数据规模与约定
- 对于 30\%30% 的数据,保证 n \le 5 \times 10^3n≤5×103。
- 对于 100\%100% 的数据,保证 1 \leq n \le 10^51≤n≤105,0 \le a_i \le 5 \times 10^30≤ai≤5×103。
分析:
这道题....emmm 刚开始没什么思路,看了看题解,大致知道怎么去做了,只是没想到题解是清一色的双重for循环,但是双重循环5000不会超时吗?我记得是双重循环3000+就要超时的.....也或许是大家剪枝用的好吧...
没什么新鲜的东西,四根木棒,假设为a,b,c,d,则必有a+b=c=d,这样组成等边三角形,用桶来存储每个长度短棒的个数,然后开双重for循环,来寻找a和b,找到a和b之后,要看a+b的短棒数量有没有两根,以及a+b是否>5000(题主就是因为没有加这个判断,re了七个数据....),如果都满足的话,还要注意以下两点,若a==b,那么就是长度为a的短棒选两根,长度为2a的短棒选两根,乘积为组合数,如果a!=b,那么就是长度为a的短棒数量*长度为b的短棒数量*长度为a+b的短棒数量,注意要对1e9+7取余,其余没什么了...
上AC代码:
#include<iostream>
#include<math.h>
#include<stdio.h>
#define MODD 1000000007LLusing namespace std;
int n;
int a[100005];
int mark[5005];
int ans;
int CC(int k);
int maxlen=-1;int main()
{cin>>n;for(int i=1;i<=n;i++){scanf("%d",&a[i]);maxlen=max(maxlen,a[i]);mark[a[i]]++;}for(int i=0;i<=maxlen;i++)for(int j=i;j<=maxlen;j++){if(i+j>5000) break;if(mark[i+j]>0){// cout<<i<<" "<<j<<" "<<mark[i]<<" "<<mark[j]<<endl;if(i==j)ans=(ans+CC(mark[i])*CC(mark[i+i]))%MODD;elseans=(ans+(((mark[i]*mark[j])%MODD)*CC(mark[i+j]))%MODD)%MODD;//cout<<"ans is "<<ans<<endl;}}cout<<ans;return 0;
}
int CC(int k)
{int s=((k*k-k)/2)%MODD;return s;
}
洛谷-P3799 妖梦拼木棒相关推荐
- 洛谷[P3799 妖梦拼木棒] {暴力枚举} 奋斗的珂珂~
洛谷[P3799 妖梦拼木棒] {暴力枚举} 题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 n 根木棒,现在从中选 4 根,想要组成一个正三角形,问有几种选法? 答案 ...
- 洛谷 P3799 妖梦拼木棒【枚举/组合数学】
题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 nnn 根木棒,现在从中选 444 根,想要组成一个正三角形,问有几种选法? 答案对 109+710^9+7109+7 ...
- 洛谷P3799 妖梦拼木棒
题目链接 题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有n根木棒,现在从中选4根,想要组成一个正三角形,问有几种选法? 输入格式: 第一行一个整数n 第二行n个整数,a ...
- 【题解】【算法】- 洛谷 - P3799 妖梦拼木棒(组合数学)
题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 n 根木棒,现在从中选 4 根,想要组成一个正三角形,问有几种选法? 答案对 109 + 7 取模. 输入格式 第一行一 ...
- 洛谷P3799 妖梦拼木棒 题解
//简单的思路:四根必有两根相同,所以咱们就先选两根组合成第三根,确定另外相同的两根的长度 //分为两种情况,一.预选两根相同长度.二.预选两根不同长度. //所有情况是预选*(确定的另外两根) #i ...
- 洛谷 P3799 妖梦拼木棒
题目 这道题主要考组合数学,一开始我没注意数据范围,傻乎乎地模拟,结果复杂度爆炸10个TLE.这道题是算出来的. 思路是用一个栈把相同长度个数超过2的木棍用栈保存下来,同时用一个数组存下所有长度木棍的 ...
- [luogu P3799] 妖梦拼木棒
[luogu P3799] 妖梦拼木棒 题目描述 解决过程 思路 代码 感想 题目描述 点击此处查看题目描述 解决过程 暴力不多阐述,很显然是无法AC的 解决此题需要用到组合数 思路 这道题要求拼成等 ...
- P3799 妖梦拼木棒——枚举+组合数学
妖梦拼木棒 题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有 nnn 根木棒,现在从中选 444 根,想要组成一个正三角形,问有几种选法? 答案对 109+710^9+7 ...
- 洛谷 P3797 妖梦斩木棒 解题报告
P3797 妖梦斩木棒 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了一支非常长的木棒,妖梦把它们切成了等长的\(n\)段.现在这个木棒可以看做 ...
最新文章
- 使用livereload实现自动刷新
- 学习WINDOWS内核好书
- [J2ME]Nokia播放音乐时发生MediaException的解决办法
- [ZigBee] 9、ZigBee之AD剖析——AD采集CC2530温度串口显示
- 广告植入、电商导流……“变味”的线上演唱会
- 关系重叠?实体嵌套?曝光偏差?这个模型统统都搞得定!
- Linux信号量之内核信号量
- NSObject协议中方法:description 和 debugDescription
- 栈溢出笔记1.5 换一个汇编工具
- 集合覆盖模型例题_在打CodeForces的过程中发现的一个小模型
- java 按分割为数组中_[Java教程]JS中,split()用法(将字符串按指定符号分割成数组)...
- QT QComBox详细用法 自定义QComboBox控件
- 云计算IaaS核心技术全景指南
- UE4/UE5 虚幻引擎,Light光照系列(一)
- 职称论文发表教育期刊《中小学教育》杂志简介及投稿须知
- 如何用Mockplus快速做一个手风琴菜单?
- GATK GATK best practices notes
- MAUI Developer Day in GCR
- 对视频剪辑应用灰度图像变换+Moviepy生成灰度视频处理遇到几个有意思的问题
- kafka自动提交offset的设置理解
热门文章
- 图像处理中几何畸变校正,图像纠正的方法有哪些
- Thread疾风传·螺旋丸还是须佐能乎
- 2023年计算机考研专业课408 - 王道书资源做题本OneNote电子笔记
- Learn Python the hard way 2nd(Python 2.7) ex43 编写一个游戏
- c++中的点号(.),冒号(:)和双冒号(::)运算符
- moment 获取常用时间范围(本月、上月、本季度、本周、昨天、距离截止时间剩余...等)
- Java打包混淆之Allatori
- 做好企业数据管理,用什么样的数据开发平台?
- 魔方机器人机械方面设计说明书
- 为何游戏公司青睐工作室制度?