uva--10057+数学问题
2014-11-17 22:46
218 查看
题意:
输入n个数x1,x2.....xn,找数A使得|X1-A| + |X2-A| + … … + |Xn-A|的值最小。
思路:
开始的时候直接把目标表达式平方,然后经过一番推导后认为A是Xi的平均数时可以使得表达式的值最小;
后面写出代码后WA了好几发,然后看了一下别人的思路:如果从距离的角度上考虑,将|Xi-A|看成数轴上A到
Xi的距离,那么将X1,Xn,X2,Xn-1...这样两两分组后,就可以知道A取中位数时可以使得上式值达到最小。
将数组从小到大排序后,当n为奇数时,中位数为a[n/2];当n为偶数时,中位数为a[n/2-1]和a[n/2],
并且此时,这两个数之间的数也是满足要求的。
代码如下:
输入n个数x1,x2.....xn,找数A使得|X1-A| + |X2-A| + … … + |Xn-A|的值最小。
思路:
开始的时候直接把目标表达式平方,然后经过一番推导后认为A是Xi的平均数时可以使得表达式的值最小;
后面写出代码后WA了好几发,然后看了一下别人的思路:如果从距离的角度上考虑,将|Xi-A|看成数轴上A到
Xi的距离,那么将X1,Xn,X2,Xn-1...这样两两分组后,就可以知道A取中位数时可以使得上式值达到最小。
将数组从小到大排序后,当n为奇数时,中位数为a[n/2];当n为偶数时,中位数为a[n/2-1]和a[n/2],
并且此时,这两个数之间的数也是满足要求的。
代码如下:
<span style="font-size:18px;">#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; int a[1000100]; int main() { int i,cnt,n,ans,t,max,min; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) { scanf("%d",&a[i]); } sort(a,a+n); if(n%2) { ans=a[n/2]; max=min=a[n/2]; cnt=1; } else { cnt=a[n/2]-a[n/2-1]+1; ans=a[n/2-1]; min=a[n/2-1]; max=a[n/2]; } t=0; for(i=0;i<n;i++) { if(a[i]>=min&&a[i]<=max) ++t; if(a[i]>max) break; } printf("%d %d %d\n",ans,t,cnt); } return 0; } </span>
相关文章推荐
- uva - 10714 - Ants(数学推导、蚂蚁问题)
- uva 10387 Billiard (基础数学问题.平面反射)
- (组合数学3.3.2.2)UVA 10497 - Sweet Child Makes Trouble(特殊的排列问题——错排方案数)
- UVa 10382 Watering Grass (区间覆盖贪心问题+数学)
- 数学·解码问题·UVA1262 PassWord
- UVa 10250 The Other Two Trees(数学问题)
- UVa11300 Spreading the Wealth(数学问题)
- 【数学物理问题】UVALive - 6921 Refraction
- uva - 10057 - A mid-summer night's dream. (数学、中位数)
- UVA 10089 Repackaging 数学问题
- 数学之美 系列十八 矩阵运算和文本处理中的分类问题
- 几个把平面几何问题的辅助线做到空间去的数学趣题
- 数学问题:正态分布
- 数学之美 系列十八 - 矩阵运算和文本处理中的分类问题
- 【数学之美系列十八 】矩阵运算和文本处理中的分类问题
- 数学实验中遇到的问题
- Gossip数学问题算法的程序实现
- 数学问题:正态分布
- 转载:数学工具常见问题集
- 数学之美 系列十七 闪光的不一定是金子 谈谈搜索引擎作弊问题(转载)