ACM_三角形的周长
三角形的周长
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
有n根棍子,棍子i的长度为ai,想要从中选出3根棍子组成周长尽可能长的三角形。请输出最大的周长,若无法组成三角形则输出0。
Input:
输入包含多组测试,每组测试第一行输入一个整数n(3≤n≤10^5);第二行输入n个整数ai(1≤ai≤10^6);
Output:
对于每组测试,输出一个数字,表示最大周长,如果无法组成三角形,则输出0。
Sample Input:
5
2 3 4 5 10
4
5 4 20 10
Sample Output:
12
0
解题思路:这是《挑战程序设计竞赛(第二版)》里的一道题,书中说了一种解法O(n³),另外,还特意说明另有一种O(nlogn)的解法,留给读者思考。但对于此题来讲,由于给出n的范围最大值是10^5,所以不能用O(n³),而应该用O(nlogn)的解法。
我们知道组成三角形的充要条件是:最长的边小于其余两边之和;不难想到,可以三重循环枚举所有的选择方案,再判断能否组成三角形,最后找出最大的周长即可。不过此算法时间复杂度太大,会超时!
另一种方法是先把棍子进行排序,然后只比较相邻的三个棍子,最后选择最大的周长。这样只需一次循环即可。为什么这样就可行?理由:假如棍子已经升序排序了,有a<b<c<d,如果有a+b>c且a+b>d,程序中并没有比较a+b和d,那么是否会漏掉这种情况导致错误呢,不会的,因为如果a+b>d的话,那么b+c也一定大于d,而a+b又小于b+c,所以a+b和d后面的数的比较是多余的,而且若这两种情况同时成立,我们也只能取后一种的情况,因为要得到最长的周长!!!这样就只需比较相邻的三个棍子即可。
#include<bits/stdc++.h>
using namespace std;
int a[],n;
int main(){
while(cin>>n){
for(int i=;i<n;++i)
cin>>a[i];
sort(a,a+n);//默认升序排序
int ans=;
for(int i=;i<n-;++i){
int len=a[i]+a[i+]+a[i+];//三角形的周长
if(a[i]+a[i+]>a[i+])ans=max(ans,len);//证明出来的结论
}
cout<<ans<<endl;
}
return ;
}
ACM_三角形的周长的更多相关文章
- PHP图形计算器(计算三角形矩形周长面积)
运用PHP面向对象的知识设计一个图形计算器,同时也运用到了抽象类知识,这个计算器可以计算三角形的周长和面积以及矩形的周长和面积.本图形计算器有4个页面:1.PHP图形计算器主页index.php; ...
- 大一C语言学习笔记(11)---编程篇--写一个程序,可以获取从键盘上输入的的三个数,并能够判断是否可以以这三个数字作为边长来构成一个三角形,如果可以的话,输出此三角形的周长及面积,要求 0 bug;
考核内容: 写一个程序,可以获取从键盘上输入的的三个数,并能够判断是否可以以这三个数字作为边长来构成一个三角形,如果可以的话,输出此三角形的周长及面积: 答案: #include<stdio.h ...
- P1027 三角形的周长
题目描述 有n根棍子,棍子i的长度为Ai.现在想要从中选出3根棍子组成周长尽可能长的三角形.请输出最大周长,若无法组成三角形则输出0. 输入格式 第一行是一个正整数n(3<=n<=1000 ...
- leetcode976之三角形最大周长
题目描述: 给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的.面积不为零的三角形的最大周长. 如果不能形成任何面积不为零的三角形,返回 0. def largePara(A): A. ...
- ACM_三角形蛇形矩阵
三角形蛇形矩阵 Time Limit: 2000/1000ms (Java/Others) Problem Description: 小铠觉得各类题型是要温故而知新的,所以他叫小发出一道类似做过的题. ...
- 编写一个Shape类,具有属性:周长和面积; 定义其子类三角形和矩形,分别具有求周长的方法。 定义主类E,在其main方法中创建三角形和矩形类的对象, 并赋给Shape类的对象a、b,使用对象a、b来测试其特性。
package shape; public class Shape { //定义成员变量 private double zhouchang; private double mianji; public ...
- python3 练手实例1 计算三角形周长和面积
def j(): a,b,c=map(float,input('请输入三角形三条边的长度,用空格隔开:').split()) if a>0 and b>0 and c>0 and a ...
- python应用-已知三角形的边长求他的面积和周长
""" 已知三角形的边长求他的面积和周长 Author:罗万财 Date:2017-3-3 """ import math a=float( ...
- C#编写一个控制台应用程序,输入三角形或者长方形边长,计算其周长和面积并输出
编写一个控制台应用程序,输入三角形或者长方形边长,计算其周长和面积并输出. 代码: using System; using System.Collections.Generic; using Syst ...
随机推荐
- 破损的键盘(codevs 4650)
题目描述 Description 有一天,你需要打一份文件,但是你的键盘坏了,上面的"home"键和"end"键会时不时地按下,而你却毫不知情,甚至你都懒得打开 ...
- 主席树初探--BZOJ1901: Zju2112 Dynamic Rankings
n<=10000的序列做m<=10000个操作:单点修改,查区间第k小. 所谓的主席树也就是一个值域线段树嘛..不过在这里还是%%fotile 需要做一个区间查询,由于查第k小,需要一些能 ...
- Partitioned Replacement for Cache Memory
In a particular embodiment, a circuit device includes a translation look-aside buffer (TLB) configur ...
- 289. Game of Live
According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...
- SPOJ SUMPRO(数学)
题意: 给出一个数N,问所有满足n/x=y(此处为整除)的所有x*y的总和是多少.对答案mod(1e9+7). 1 <= T <= 500. 1 <= N <= 1e9. 分析 ...
- 选择器的使用(not选择器)
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta ...
- Eclipse的SVN插件 Subclipse
原文:https://www.oschina.net/p/subclipse Subclipse 是一个为 Eclipse IDE 添加 Subversion 支持的项目.支持几乎所有版本的Eclip ...
- 使用Java快速开发博客、官网等偏内容型网站-IDEA篇-MCMS
分享快乐 由于官网提供的是eclipse的教学视频,清晰度感人,看得我就一个纳闷,反复的看,反复检查,就是不行,然后天真的寻觅帮助,反复查看文档依旧凉凉.最后放弃,转战idea.特此篇,希望能帮助到各 ...
- 《编程导论(Java)·3.1.2 方法》之 副作用
4. 副作用 在一些语言如Pascal中,子程序被分成两种:函数和过程.尽管Java没有强制性地要求将方法区分为命令和函数.然而这样的差别对于良好地设计程序有非常大的帮助[1]. 首先说明一个概念:副 ...
- SQLite数据库基本操作
SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非 ...