题目背景

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

题目描述

有 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 妖梦拼木棒相关推荐

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

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

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

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

  3. 洛谷P3799 妖梦拼木棒

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

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

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

  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. 使用livereload实现自动刷新
  2. 学习WINDOWS内核好书
  3. [J2ME]Nokia播放音乐时发生MediaException的解决办法
  4. [ZigBee] 9、ZigBee之AD剖析——AD采集CC2530温度串口显示
  5. 广告植入、电商导流……“变味”的线上演唱会
  6. 关系重叠?实体嵌套?曝光偏差?这个模型统统都搞得定!
  7. Linux信号量之内核信号量
  8. NSObject协议中方法:description 和 debugDescription
  9. 栈溢出笔记1.5 换一个汇编工具
  10. 集合覆盖模型例题_在打CodeForces的过程中发现的一个小模型
  11. java 按分割为数组中_[Java教程]JS中,split()用法(将字符串按指定符号分割成数组)...
  12. QT QComBox详细用法 自定义QComboBox控件
  13. 云计算IaaS核心技术全景指南
  14. UE4/UE5 虚幻引擎,Light光照系列(一)
  15. 职称论文发表教育期刊《中小学教育》杂志简介及投稿须知
  16. 如何用Mockplus快速做一个手风琴菜单?
  17. GATK GATK best practices notes
  18. MAUI Developer Day in GCR
  19. 对视频剪辑应用灰度图像变换+Moviepy生成灰度视频处理遇到几个有意思的问题
  20. kafka自动提交offset的设置理解

热门文章

  1. 图像处理中几何畸变校正,图像纠正的方法有哪些
  2. Thread疾风传·螺旋丸还是须佐能乎
  3. 2023年计算机考研专业课408 - 王道书资源做题本OneNote电子笔记
  4. Learn Python the hard way 2nd(Python 2.7) ex43 编写一个游戏
  5. c++中的点号(.),冒号(:)和双冒号(::)运算符
  6. moment 获取常用时间范围(本月、上月、本季度、本周、昨天、距离截止时间剩余...等)
  7. Java打包混淆之Allatori
  8. 做好企业数据管理,用什么样的数据开发平台?
  9. 魔方机器人机械方面设计说明书
  10. 为何游戏公司青睐工作室制度?