「Luogu P3799 妖梦拼木棒」
时间:2020-03-06
本文章向大家介绍「Luogu P3799 妖梦拼木棒」,主要包括「Luogu P3799 妖梦拼木棒」使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目大意
给出 \(N\) 根木棒,求出在这些木棒中选出 \(4\) 根组成等腰三角形的方案数.
分析
四根木棒要组成一个等腰三角形只有当两根木棒的长度相同,另外两根木棒的长度和与这两根木棒长度相同时才行.
于是可以预处理一个数组 \(p\),\(p_i\) 表示选两根木棒的长度和为 \(i\) 的方案数,这样对于长度为 \(k\) 的等腰三角形的个数就是 \(C_{sum_k}^2\times p_k\),于是最后的答案就是 \(\sum_{k=1}^{5000}C_{sum_k}^2\times p_k\)了,具体计算部分放在代码中讲解.
代码
#include<bits/stdc++.h>
#define REP(i,first,last) for(int i=first;i<=last;++i)
#define DOW(i,first,last) for(int i=first;i>=last;--i)
using namespace std;
const int MAXN=1e4+7;
const long long mod=1e9+7;
int N;
int sum[MAXN];//记录每个长度出现的次数
long long p[MAXN];
int main()
{
scanf("%d",&N);
int len;
REP(i,1,N)
{
scanf("%d",&len);
sum[len]++;
}
REP(i,1,2500)
{
p[i*2]+=1ll*(sum[i]*(sum[i]-1)/2);//对于长度为i的木棒对于长度为i*2的贡献即使在这些木棒中选出两根的方案数
p[i*2]%=mod;
REP(j,i+1,5000-i)
{
p[i+j]+=1ll*sum[i]*sum[j];//如果不一样就可以直接用乘法原理
p[i+j]%=mod;
}
}
long long answer=0;
REP(i,1,5000)
{
answer+=(1ll*sum[i]*(sum[i]-1)/2)%mod*p[i]%mod;//对于长度为i的等腰三角形的计算就直接套用分析中的公式
answer%=mod;
}
printf("%lld",answer);//输出
return 0;
}
原文地址:https://www.cnblogs.com/Sxy_Limit/p/12427645.html
- 简练的视图模型 ViewModel
- 提供智能服务?先迈过数字信任这个坎
- 《天弋夺宝》—01飞船的控制
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出
- 核心代码(未注释)
- 从科研角度谈“如何实现基于机器学习的智能运维”
- 用后台代码创建Storyboard
- 十分钟掌握微信小程序开发:高仿电商产品分类功能
- WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务
- DoubleAnimation方法
- 已经重写,源码和文章请跳转http://www.cnblogs.com/ymnets/p/5621706.html
- 有趣 不用js也能创建silverlight
- Hadoop和Spark的异同
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(62)-EF链接串加密
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android应用安装卸载监控
- 细数这些年被困扰过的 TS 问题
- 将WordPress插件Elementor标签插入到WordPress模板文件以使用Elementor编辑
- WordPress自定义新建多区域widget小工具调用
- WordPress调用分类目录 及输出当前分类下的二级目录 和分类文章数量显示
- CSS让Li标签溢出后自动换行
- docker里运行docker命令
- 一次性实战java8 新特性(全)—— Lambda、Optional、stream、DateTime
- 面试Python高频问题汇总
- python自学成才之路 miniconda创建虚拟环境
- 逐行阅读Spring5.X源码(一) BeanDefinition,起点
- linux 磁盘占满 查看占用
- 逐行阅读Spring5.X源码(二) BeanDefinition的父接口-AttributeAccessor 、BeanMetadataElement ,进阶
- 64. Vue中的插槽slot
- 65. Vue中的作用域插槽