社区讨论
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 条回复,欢迎继续交流。
正在加载回复...