1011整数转换
来源:互联网 发布:机械加工工艺报价软件 编辑:程序博客网 时间:2024/06/05 16:53
Description
有N个正整数a[1]...a[N],你可以选择一个正整数X,然后以后每一步,你可以使一个数a[i]变成 a[i] + X,或者 a[i] - X。
聪明的你,一定会知道怎么选择这个X,使得最后所有的数都变成相等,而且使用的变化步数最少。
Input
多组测试数据。
对于每组数据,一个N,接下来一行有N个数a[1]...a[N] (1<= a[i] <= 10^6)>。保证这N个数不全相等。
N<=1000
Output
每组数据单独一行,你找出的正整数X,以及最少步数,两个数用一个空格隔开。
Sample Input
31 2 343 5 7 11
Sample Output
1 22 5
分析:首先要选择一个适当的x,这个x保证要是的a[i]通过数次的加或者减x,数组a所有的数都相等,且希望x是满足此条件的最大(保证转换的步数最小)。
参考代码:
#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<string>#include<algorithm>#include<stack>#include<queue>#include<vector>#include<map>using namespace std;const int inf = 0x3f3f3f3f;const int maxn = 10000+10;int n;int a[maxn];int gcd( int a, int b){ if( !b) return a; return gcd(b,a%b);}int main(){ while( ~scanf("%d",&n)) { int s = 0; for( int i = 1; i <= n; i++) scanf("%d",&a[i]); sort( a+1,a+1+n); int x = 0; for( int i = 2; i <= n; i++) x= gcd( x,a[i]-a[i-1]); int mid = (n+1)/2; long long ans = 0; for( int i = 1; i <= n; i++) ans = ans+abs(a[mid]-a[i])/x; //for( int i = mid+1; i <= n; i++) // ans = ans+(a[i]-a[mid])/x; printf("%d %lld\n",x,ans); } return 0;}
0 0
- 1011整数转换
- 整数转换
- 整数转换
- 整数转换
- 整数转换
- 整数转换
- 字符串转换整数及整数转换字符串
- 字符串转换为整数
- 整数转换成字符串
- 整数小数相互转换
- 字符串转换为整数
- 整数字符串的转换
- 3. 整数/字符串转换
- 字符串转换为整数
- 整数转换成字符串
- 整数转换成字符串
- 字符串转换为整数
- 字符串转换成整数
- 1002. A+B for Polynomials (25)
- mysql进阶(三十一)常用命令汇总
- static_cast
- 第一篇博客
- 自定义view加列表展示
- 1011整数转换
- JAVA笔记-如何将百万级数据高效的导出到Excel表单
- HTTP请求中8种请求方法
- 用IO流技术-将GBK格式的文本文件转存为UTF-8格式的文本文件
- Qt Quick快速入门之qml布局
- 集成百度sdk
- React初识
- 第48篇一对多实现(五)老师端动态加载学生头像及PHP array_map
- block、inline、inline-block对比