洛谷P3799 妖梦拼木棒
P3799 妖梦拼木棒
- 53通过
- 345提交
- 题目提供者orangebird
- 标签
- 难度普及/提高-
- 时空限制1s / 128MB
提交 讨论 题解
最新讨论更多讨论
- 暂时没有讨论
题目背景
上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来。
题目描述
有n根木棒,现在从中选4根,想要组成一个正三角形,问有几种选法?
输入输出格式
输入格式:
第一行一个整数n
第二行n个整数,a1,a2,……an(0<ai<=5000),代表每根木棒的长度。
输出格式:
一行一个整数,对1e9+7取模
输入输出样例
- 4 1 1 2 2
- 1
说明
对于30%的数据 N<=5000
对于100%的数据 N<=100000
by-szc
吐槽:做这道题发现了我个人的很多问题,做题实在是不够仔细!
分析:假设选4根木棍长度为a=b=c+d,我们枚举a和c,就能计算出b和d,这就变成了从所给长度中能选出多少根我们枚举长度的木棍,就要用到组合数。需要注意的是,我们要特判c是否等于d,因为选择一根c长度的木棍的方案数*选择一根d长度木棍的方案数≠选择两根c长度木棍的方案数,同时,枚举c到a/2就一定要停止,因为超过a/2,就会把一个答案算2次。关于取模的问题,其实我们只需要用到两个组合数,这两个组合数在计算的时候都不必取模,为什么呢?因为5000*4999/2 < 1e9 + 7,如果非要取模,就只有用逆元了。
如果是用数学方法做这种统计方案数的题一定要非常细心!注意所有可能但不完全相同的情况并且不能多算少算!
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- #include <algorithm>
- typedef long long LL;
- using namespace std;
- const int mod = ;
- int n;
- long long a[],maxn,ans;
- LL c1(LL x)
- {
- return x;
- }
- LL c2(LL x)
- {
- return x * (x - ) / ;
- }
- int main()
- {
- scanf("%d", &n);
- for (int i = ; i <= n; i++)
- {
- long long t;
- scanf("%lld", &t);
- maxn = max(maxn, t);
- a[t]++;
- }
- for (int i = ; i <= maxn; i++)
- for (int j = ; j <= i/; j++)
- {
- int b = i - j;
- if (b != j)
- {
- if (a[i] >= && a[b] >= && a[j] >= )
- ans += (c2(a[i])*(c1(a[j]) % mod)) % mod*(c1(a[b]) % mod) % mod;
- }
- else
- {
- if (a[i] >= && a[j] >= )
- ans += c2(a[i])*c2(a[j]) % mod;
- }
- ans %= mod;
- }
- printf("%lld\n", ans % mod);
- return ;
- }
洛谷P3799 妖梦拼木棒的更多相关文章
- luogu P3799 妖梦拼木棒
二次联通门 : luogu P3799 妖梦拼木棒 /* luogu P3799 妖梦拼木棒 用一个桶存下所有的木棒 美剧两根短的木棒长度 后随便乘一乘就 好了.. */ #include <a ...
- 洛谷 P3797 妖梦斩木棒 解题报告
P3797 妖梦斩木棒 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了一支非常长的木棒,妖梦把它们切成了等长的\(n\)段.现在这个木棒可以看做 ...
- 洛谷P3797 妖梦斩木棒
P3797 妖梦斩木棒 题目背景 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了一支非常长的木棒,妖梦把它们切成了等长的n段.现在这个木棒可以看 ...
- P3799 妖梦拼木棒 (组合数学)
题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有n根木棒,现在从中选4根,想要组成一个正三角形,问有几种选法? 输入输出格式 输入格式: 第一行一个整数n 第二行n个整数 ...
- 洛谷 P3797 妖梦斩木棒
https://www.luogu.org/problem/show?pid=3797 题目背景 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了 ...
- AC日记——妖梦拼木棒 洛谷 P3799
妖梦拼木棒 思路: 神特么题: 代码: #include <bits/stdc++.h> using namespace std; #define mod 1000000007LL int ...
- luoguP3799 妖梦拼木棒 [组合数学]
题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有n根木棒,现在从中选4根,想要组成一个正三角形,问有几种选法? 输入输出格式 输入格式: 第一行一个整数n 第二行n个整数 ...
- 题解 洛谷P3799 【妖梦拼木棒】
一道水题 (还是做了一个小时,我太菜了 基本思路: 题里面说,4根棍子拼成一个正三角形(等边三角形) 若设这四根棍子长度为\(a,b,c,d\)且\(a≥b>c≥d\) 那很容易得到 (真的很容 ...
- luogu3799 妖梦拼木棒
题目大意 有n根木棒,现在从中选4根,想要组成一个正三角形,问有几种选法?木棒长度都<=5000. 题解 根据容斥原理,三角形两条边分别由长度相等的单根木棒组成,另一条边由两条小于该边长的木棒构 ...
随机推荐
- Zabbix远程执行命令
原文发表于cu:2016-06-14 Zabbix触发器(trigger)达到阀值后会有动作(action)执行:发送告警信息或执行远程命令. 本文主要配置验证zabbix执行远程命令. 一.环境 S ...
- RHCE6.0上午的考试一键完成
#!/sbin/bash # #initial envirment #variable define IPADDR=192.168.0.12 NETMASK=255.255.255.0 HOSTNAM ...
- mysql常用语句入门整理
这篇属于小白入门级别,如果你已经高手可以直接跳过 1.运行数据库mysqld.exe,客户端直接mysql -uroot(root是默认用户名) -p 2 showdatabases,showtabl ...
- 6. 网络信息API
一.用数值表示socket地址&用名字表示socket地址(socket地址==>IP地址和端口号) 1. 用数值表示socket地址不便于记忆,也不便于扩展(比如从IPv4转移到IPv ...
- python 抓取网页(一)
#-------PYTHON获取网页内容-------------# import sys, urllib url = "http://www.baidu.com" #网页地址 w ...
- scrum立会报告+燃尽图(第二周第六次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2251 一.小组介绍 组名:杨老师粉丝群 组长:乔静玉 组员:吴奕瑶.公冶 ...
- 软工1816 · Alpha冲刺(5/10)
团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 后端代码复审 福大各个食堂的菜品口味量化.属性标记 组织前后端线下协作 接下来 ...
- 福大软工1816:Beta(3/7)
Beta 冲刺 (3/7) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务 文字/口头描述 参与开发关键词提醒部分 展示GitHu ...
- spring框架(3)— spring集合类的注入
1.Car.java package com.eniac.beans; public class Car { private String type; private String factory; ...
- 继承&成员函数&覆盖
//成员函数. /* 当子父类中出现成员函数一模一样的情况,会运行子类的函数. 这种现象,称为覆盖操作.这时函数在子父类中的特性. 函数两个特性: 1,重载.同一个类中.overload 2,覆盖.子 ...