【uva10057】巧妙做法
来源:互联网 发布:三维结构模型数据 编辑:程序博客网 时间:2024/05/02 06:09
这个题之前做过,方法太笨还不对,今天再做突然想到一个巧妙做法,网上应该也有别人用此方法的,因为并不是很难,但我没有看别人的,是自己想出来的哈哈哈
首先要对输入的数组进行排序,这是毋庸置疑的。
因为要计算绝对值的和,所以就想到了数轴上的距离的概念。要使|X1-A|+|X2-A|最小,也就是要找一个点A,使其到X1,X2距离和最短,所以很容易想到在数轴上只要A在X1和X2之间就行。
对排序后的数组进行操作,将首尾(最小值和最大值)抽取出来,A只要介于他俩之间就行,同理再将第二位和倒数第二位抽取出来,A要介于他俩之间才行......如此剥离下去,最后只会剩余一项或是两项。
所以提前判断数组的奇偶性,奇数的话A就是中间那项(很容易吧)偶数的话就是介于两数之间的所有数A都可以取,也就是有多个A值,但是最小的A值肯定还是左边的,因为右边的只会大于等于左边的。
计算有多少个A存在于数组中的时候,用到了algorithm算法自带的上下界函数(upper_bound()和lower_bound()),很好用的。
上ac代码,也是一次就过了哈哈哈
#include <iostream>#include<algorithm>#include<cmath>using namespace std;int num,minA,numA,arr[1000005];int main(){while(cin>>num){for (int i=0;i<num;i++){cin>>arr[i];}sort(arr,arr+num);//check the parityif (num%2==1){//oddminA = arr[(num-1)/2];numA = upper_bound(arr,arr+num,minA)-lower_bound(arr,arr+num,minA);cout<<minA<<" "<<numA<<" "<<"1"<<endl;}else{//evenint a1=arr[num/2-1];int a2=arr[num/2];minA=a1;if (a1==a2){numA=upper_bound(arr,arr+num,minA)-lower_bound(arr,arr+num,minA);cout<<minA<<" "<<numA<<" "<<"1"<<endl;}else{numA=upper_bound(arr,arr+num,a2)-lower_bound(arr,arr+num,a1);cout<<minA<<" "<<numA<<" "<<a2-a1+1<<endl;}}}return 0;}
0 0
- 【uva10057】巧妙做法
- UVA10057
- uva10057
- 1852 Ants【巧妙做法】
- 输出21个AAAAAAAAAAAAAAAAAAAAA的巧妙做法
- 输出21个AAAAAAAAAAAAAAAAAAAAA的巧妙做法
- 16进制转8进制(较为巧妙的做法)
- 61. Rotate List-链表做法归纳-巧妙
- UVA10057中位数的定义,个数
- C#优化字符串操作(7)--输出21个AAAAAAAAAAAAAAAAAAAAA的巧妙做法
- C语言优化实例:一种消除嵌套switch-case的巧妙做法
- POJ1703 && POJ2942 &&POJ 1182 并查集 这个做法挺巧妙
- uva10057 - A mid-summer night's dream
- UVA10057-A mid-summer night's dream.
- uva10057 - A mid-summer night's dream
- [中位数]A mid-summer night's dream.uva10057
- 巧妙sql
- 巧妙变换
- 兼容 ie firehox的图片预览
- cxf和jboss eap 6.2版本冲突
- 修改项目的发布名称
- DEVEXPRESS ASPxGridView 如何在JS中获取Focused焦点行的多列值
- UI自动化测试系列之-----TestNg的参数化
- 【uva10057】巧妙做法
- 情不为因果,缘注定生死
- 深入了解android平台的jni(二)
- 广度优先
- android_qqApk反编译/android小工具/ddms截屏
- null 与 not null
- IE6无法加载CSS
- 造字程序造字
- 给Android源码增加一个项目