茅台【思维/数学/剪枝】By cellur925
给你\(n\)根木棍,问有多少种方法,使得选出的三根木棍能组成三角形。
开始想要用搜索的,但是写着写着卡壳了(?),于是改用贪心,开始对拍,觉得很稳,只是最后两个数据可能有点卡。很第一题难度。
最开始的想法:排序。\(O(n^3)\)枚举一下。
进阶想法:发现有很多枚举是重复的,加入一个小剪枝,当开头两个数相加大于最大的数,直接加答案。实测速度没快多少。
最终想法:借鉴上一想法,那么其实可以借助\(lowerbound\)把复杂度将至\(O(n^2logn)\)。
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
int n,maxn;
ll ans;
int seq[20000];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&seq[i]);
sort(seq+1,seq+1+n);maxn=seq[n];
for(int i=1;i<=n-2;i++)
for(int j=i+1;j<=n-1;j++)
for(int k=j+1;k<=n;k++)
{
if(seq[i]+seq[j]<=seq[k]) break;
else if(seq[i]+seq[j]>maxn) {ans+=n-k+1;break;}
else
{
int id=lower_bound(seq+1,seq+1+n,seq[i]+seq[j])-seq;
ans+=id-k;
break;
}
}
printf("%lld\n",ans);
return 0;
}
因为数据不诚信,最后两个点开到了\(10000\),所以全机房\(80\)分。
\(std\)的做法:复杂度\(O(n^2+n)\)。这种方法的妙处在于对于每个起点,第二个棍和第三个棍分别共走\(O(n)\)。
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
int n;
ll ans;
int seq[10000];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&seq[i]);
sort(seq+1,seq+1+n);
for(int i=1;i<=n;i++)
for(int j=i+1,k=i+2;j<=n;j++)
{
while(k<=n&&seq[i]+seq[j]>seq[k]) k++;
k--;
ans+=k-j;
}
printf("%lld\n",ans);
return 0;
}
茅台【思维/数学/剪枝】By cellur925的更多相关文章
- [Codeforces 1178D]Prime Graph (思维+数学)
Codeforces 1178D (思维+数学) 题面 给出正整数n(不一定是质数),构造一个边数为质数的无向连通图(无自环重边),且图的每个节点的度数为质数 分析 我们先构造一个环,每个点的度数都是 ...
- 牛客网多校第9场 E Music Game 【思维+数学期望】
题目:戳这里 题意:鼠标点击n下,第i次点击成功的概率为p[i],连续点击成功x次可以获得x^m分,求n次点击总分数的数学期望. 解题思路:数学期望的题很多都需要转化思维,求某一个单独状态对整体答案的 ...
- Codeforces Round #304 (Div. 2) D 思维/数学/质因子/打表/前缀和/记忆化
D. Soldier and Number Game time limit per test 3 seconds memory limit per test 256 megabytes input s ...
- 1354 选数字 DP背包 + 数学剪枝
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1354&judgeId=187448 其实这题和在若干个数字中,选 ...
- 牛客网多校第5场 F take 【思维+数学期望】
题目:戳这里 思路来源:视频讲解 题意:有n个箱子按1...n标号,每个箱子有大小为di的钻石概率为pi,我们初始有个大小为0的钻石,从1到n按顺序打开箱子,遇到比手中大的箱子就换,求交换次数的数学期 ...
- Codeforces Round #272 (Div. 2) D. Dreamoon and Sets (思维 数学 规律)
题目链接 题意: 1-m中,四个数凑成一组,满足任意2个数的gcd=k,求一个最小的m使得凑成n组解.并输出 分析: 直接粘一下两个很有意思的分析.. 分析1: 那我们就弄成每组数字都互质,然后全体乘 ...
- 2017多校第一套&&hdu6038 思维 数学
链接 http://acm.hdu.edu.cn/showproblem.php?pid=6038 题意: 给你一个a序列,代表0到n-1的排列:一个b序列代表0到m-1的排列.问你可以找出多少种函 ...
- [codeforces Mail.Ru Cup 2018 Round 3][B Divide Candies ][思维+数学]
https://codeforces.com/contest/1056/problem/B 题意:输入n,m 求((a*a)+(b*b))%m==0的(a,b)种数(1<=a,b<= ...
- 51Nod 1305 Pairwise Sum and Divide | 思维 数学
Output 输出fun(A)的计算结果. Input示例 3 1 4 1 Output示例 4 first try: #include "bits/stdc++.h" using ...
随机推荐
- sort_action
li, r = [23,8, 45, 5, 0, -6, 745,8, 8], [] while (len(li) > 0): loop_, min, tag = len(li), li[0], ...
- 什么是aop?-------转
什么是AOP? http://www.cnblogs.com/zhugenqiang/archive/2008/07/27/1252761.html#commentform(转) AOP(Aspec ...
- C++笔记之外部类访问内部类的私有成员
如下图所示 内部类可以访问外部类的私有成员 而外部类无法访问内部类的私有成员 为了能让外部类访问内部类的私有成员,将外部类声明为内部类的友元类即可 #include <iostream> ...
- ckeditor html标签的class 等attribute属性都被屏蔽啦,替换成空的解决方案
ckeditor 模块中自定义class 在ckeditor模块中,编辑内容时, 在源码中填写<div class="myclass">some content< ...
- iOS 判定string是不是中文字符
+(BOOL)IsChinese:(NSString *)str { ; i< [str length];i++) { int a = [str characterAtIndex:i]; if( ...
- Rime输入工具的修改与编译安装
作为一个比较“事儿多”的五笔用户,在使用过几乎所有的主流输入工具后,我最终选择了定制性非常高(同时也比较难以上手)的Rime.刚开始是在Windows下使用小狼毫0.9.30版,这个工具在上屏速度.热 ...
- UEFI启动模式下安装Ubuntu 16.04教程【转】
本文转载自:http://blog.csdn.net/Jesse_Mx/article/details/61425361 前言 最近常帮人安装Ubuntu,也算积累了一些经验.这篇博文主要谈一谈如何在 ...
- MYSQL进阶学习笔记十四:MySQL 应用程序优化!(视频序号:进阶_32)
知识点十五:MySQL 的应用程序优化(32) 一.访问数据库采用连接池 把连接当做对象或设备,统一放在‘连接池’里.凡是需要访问数据库的地方都从连接池里取连接 二.采用缓存减少对于MySQL的访问: ...
- cannot find -lbz2 解决方法
sudo yum install -y bzip2* 或者sudo apt-get install bzip2* 还是报错就找到libbz2.so.1,建立连接或者复制到 /usr/lib/libbz ...
- 并不对劲的bzoj3677:p3647:[APIO2014]连珠线
题目大意 有一种生成\(n\)个点的树的方法为: 一开始有一个点,\(n-1\)次操作,每次可以有两种操作:1.选一个点,用一条红边将它与新点连接:2.将新点放在一条红边上,新点与这条红边两端点直接的 ...