首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【HPUoj】Translate(思维)

【HPUoj】Translate(思维)

作者头像
FishWang
发布2025-08-27 12:09:27
发布2025-08-27 12:09:27
1940
举报

题目链接:点击打开链接

问题 E: Translate

时间限制: 1 Sec 内存限制: 128 MB 提交: 2 解决: 1 状态

题目描述

你N个正整数a[1]...a[N],在最初的时候,你选择一个正整数X,然后以后每一步,你可以使一个数a[i] 变成 a[i] + X,或者 a[i] - X,聪明的你,一定会知道怎么选择这个X,使得最后所有的数都变成相等,而且使用的变化步数最少。

输入

多组测试数据。对于每组数据,一个N(2 <= N <= 1000),接下来一行有N个数a[1]...a[N] (1 <= a[i] <= 10^6)。

保证这N个数不全相等。

输出

每组数据单独一行,你找出的正整数X,以及最少步数,两个数用一个空格隔开.

样例输入

代码语言:javascript
复制
3
1 2 3
4
3 5 7 11

样例输出

代码语言:javascript
复制
1 2
2 5

大胆的猜测+ 不怕死的WA = AC

刚睡醒就想到这道题,突然想到是不是要变成的数为这些数的中位数,然后想到奇数的情况就是中位数。

如果是偶数,那么是取中间两个数的平均数,还是取左边或右边的数。

想了几个事例后,感觉分别取左边和右边的数找到一个最小的应该是对的。

然后就起床开始打代码了,结果就AC了。

代码如下:

代码语言:javascript
复制
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
#include <stack>
#include <vector>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define CLR(a,b) memset(a,b,sizeof(a))
#define PI acos(-1.0)
#define LL long long
int n;
int GCD(int a,int b)
{
	return b == 0 ? a : GCD(b,a%b);
}
int solve(int base,int num[],int &g)
{
	int ans = 0;
	g = -1;		//最大公约数
	for (int i = 1 ; i <= n ; i++)
	{
		int t = abs(num[i]-base);
		if (t == 0)
			continue;
		ans += t;
		if (g == -1)
			g = t;
		else
			g = GCD(g,t);
	}
	return ans / g;
}
int main()
{
	int num[1011];
	int ans;
	int base;
	while (~scanf ("%d",&n))
	{
		for (int i = 1 ; i <= n ; i++)
			scanf ("%d",&num[i]);
		sort(num+1,num+1+n);
		int g1,g2;
		if (n & 1)
			ans = solve(num[n/2+1] , num,g1);
		else
//			ans = min(solve(num[n/2],num) , solve(num[n/2+1],num));
		{
			int ans1 = solve(num[n/2],num,g1);
			int ans2 = solve(num[n/2+1],num,g2);
			if (ans1 > ans2)
			{
				ans = ans2; 
				swap(g1,g2);
			}
			else
				ans = ans1;
		}
		printf ("%d %d\n",g1,ans);
	}
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题 E: Translate
  • 题目描述
  • 输入
  • 输出
  • 样例输入
  • 样例输出
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档