社区讨论

0分求调,思路详细详细(超级详细)写在代码中了

P4995跳跳!参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m2e9f3h5
此快照首次捕获于
2024/10/18 12:58
去年
此快照最后确认于
2025/11/04 16:57
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int cnt;//体力总消耗值
int n,f;
int h[330];
int mm[330];
void pop()
{
	f--;
	
}
signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>h[i];//输入高度
	}
	sort(h+1,h+n+1);//从小到大排序
	int dd=0,ee=0;//dd:终点,ee:起点(这两个都随着位置的变化在不断变化)
	int k=n;//k:数组中剩余元素个数
	int flag=1;//判断下一步是找最大还是最小(0:小,1:大)
	int ta;//跳到的元素,(即将被清除出数组,因为后面不会再跳上这个了)
	for(int i=1;i<=n;i++)
	{
		memset(mm,0,sizeof(mm));//清空mm,mm是备用数组,帮助原数组kk转化
		f=k+1;//
		
		for(int j=1;j<=k;j++)
		{
			if(h[j]!=ta)
			{
				mm[j]=h[j];
			}
		}
		for(int j=1;j<=n;j++)
		{
			h[j]=mm[j];
			
			
		}//将h[i]重新排序,并忽略上次跳到的ta
		pop();//清除上一个跳到的数组
		sort(h+1,h+k+1);//重新排序
		
		if(flag)//如果flag=1,找最大
		{
			
			
			dd=h[k];//dd为最大		
		}
		else//如果flag=0,找最小
		{
		
			dd=h[1];//dd为最小	
		}
		cnt+=(dd-ee)*(dd-ee);//cnt加上消耗体力)
		ee=dd;//更新起点
		ta=dd;//更新跳过的点
		
		flag=-flag;//更新找最大、小值
		k--;//元素个数-1
	}
	cout<<cnt;//输出体力总消耗值
	return 0;
	
}

回复

0 条回复,欢迎继续交流。

正在加载回复...