分享免费的编程资源和教程

网站首页 > 技术教程 正文

洛谷刷题C++语言 | P4995 跳跳! 洛谷p1424 c语言

goqiw 2024-10-05 19:16:36 技术教程 22 ℃ 0 评论

学习C++从娃娃抓起!记录下洛谷C++学习和备考过程中的题目,记录每一个瞬间。

附上汇总贴:洛谷刷题C++语言 | 汇总_热爱编程的通信人的博客-CSDN博客


【题目描述】

你是一只小跳蛙,你特别擅长在各种地方跳来跳去。

这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 i 块的石头高度为 hi,地面的高度是 h0=0。你估计着,从第 i 块石头跳到第 j 块石头上耗费的体力值为 (hi?hj)2,从地面跳到第 i 块石头耗费的体力值是 (hi)2。

为了给小 F 展现你超级跳的本领,你决定跳到每个石头上各一次,并最终停在任意一块石头上,并且小跳蛙想耗费尽可能多的体力值。

当然,你只是一只小跳蛙,你只会跳,不知道怎么跳才能让本领更充分地展现。

不过你有救啦!小 F 给你递来了一个写着 AK 的电脑,你可以使用计算机程序帮你解决这个问题,万能的计算机会告诉你怎么跳。

那就请你——会写代码的小跳蛙——写下这个程序,为你 NOIp AK 踏出坚实的一步吧!

【输入】

输入一行一个正整数 n,表示石头个数。

输入第二行 n 个正整数,表示第 i 块石头的高度 hi

【输出】

输出一行一个正整数,表示你可以耗费的体力值的最大值。

【输入样例】

2
2 1

【输出样例】

5

【代码详解】

#include <bits/stdc++.h>
using namespace std;
int n, a[305], l, r, mark=1, tmp;
long long ans=0;
int main()
{
    cin >> n;
    for (int i=1; i<=n; i++) {
        cin >> a[i];
    }   
    sort(a+1, a+n+1);
    l = 0;
    r = n;
    tmp = 0;
    while (l<=r) {
        if (mark==1) {
            // cout << "a[r] tmp " << a[r] << " " << tmp << endl;
            ans += (a[r]-tmp)*(a[r]-tmp);
            l++;
            tmp = a[r];
            mark = 0;
        } else {
            // cout << "a[l] tmp " << a[l] << " " << tmp << endl;
            ans += (a[l]-tmp)*(a[l]-tmp);
            r--;
            tmp = a[l];
            mark = 1;
        }
    }
    cout << ans << endl;
    return 0;
}

【运行结果】

2
2 1
5

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表