洛谷-跳跳!

这题非常水…

贪心策略:

每次都跳到离你所在位置的最远距离(开始时在0的位置),这样平方后数会最大,结果也就最大。

注意:

1.此题要开long long ,否则只有50分(窝尝试过了QwQ)

2.不用考虑距离为负数,平方后负数会变为整数

其余见注释~~

关爱生命,远离抄袭:

#include <bits/stdc++.h>
using namespace std;
int a[305],vis[305];//数组大小>300
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)	
		cin>>a[i];//输入
	sort(a+1,a+n+1);//排序
	int now=0;//最开始在0的位置 now 代表当前位置
	long long ans=0;//三年OI一场空,不开long long见祖宗
	for(int i=1;i<=n;i++) 
	{
		int c=-1,w;
		for(int j=1;j<=n;j++)
		{
			if(!vis[j])
				c=max(abs(a[j]-now),c);//判断哪里离当前位置最远
		}
		for(int j=1;j<=n;j++)//找对应的位置
		{
			if(abs(a[j]-now)==c)//找到了....
			{
				vis[j]=1;//注意!这里是J
				w=a[j];
				break;//找到了便跳出循环
			}
		}
		ans+=(long long)(w-now)*(w-now);//强制转换为long long类型
		now=w;//更新当前在的位置
	}
	cout<<ans;//完美解决QAQ
    return 0;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值