USACO Section 1.3 Ski Course Design

题目描述

农民约翰在他的农场有N个小山(1 <= N <= 1,000),每个都有0 ... 100的整数高程。在冬天,由于这些山丘上有丰富的雪,FJ经常进行滑雪训练营。
不幸的是,FJ刚刚发现将在明年在用作滑雪训练营的农场进行评估的新税收。然而,仔细阅读法律后,他发现,滑雪场的官方定义要求他的财产的最高和最低的山差别严格大于17.因此,如果他缩短最高的山丘,并增加质量增加较短的山丘的高度,FJ可以避免缴纳税款,只要最高和最低的山脉之间的新差距最多为17。

如果用x ^ 2单位的钱来改变一个山的高度x单位,FJ需要支付的最低金额是多少? FJ只能改变一个山的高度一次,所以每个山的总成本是其原始高度和最终高度之间的差的平方。 FJ只愿意把每个山丘的高度改变一个整数。

程序名称:skidesgin
输入格式

第1行:整数N.
第2..1 + N行:每行包含单个山丘的高程。

输入 (file skidesgin.in)

 
 

5
20
4
1
24
21

输入注释:
FJ的农场有5个山丘,海拔1,4,20,21和24。

输出格式

第1行:FJ需要支付的最小金额来修改山丘的高度,所以最大和最小之间的差异最多为17个单位。

输出(file skidesgin.out)
18

输出注释:
FJ保持高度4,20和21的山峦。 他向高度1的山丘增加质量,使其达到高度4(成本= 3 ^ 2 = 9)。 他把高度24的山降低到21,也就是3 ^ 2 = 9。

解题代码

/*
ID: 15189822
PROG: skidesign
LANG: C++
*/
#include<iostream>
#include<algorithm>
#include<fstream>
using namespace std;
const int N = 1000;
int x[N+1],n;
ifstream fin("skidesign.in");
ofstream fout("skidesign.out");
int res(int t){
   int s=0;
   for (int i=1;i<=n;i++){
      if (x[i]<t&&t-x[i]>8) s+=(t-x[i]-8)*(t-x[i]-8);
      else if (x[i]>t&&x[i]-t>9) s+=(x[i]-t-9)*(x[i]-t-9);
   }
   return s;
}
int main(){
    int r=0x3f3f3f3f;
    fin>>n;
    for (int i=1;i<=n;i++){
        fin>>x[i];
    }
    sort(x+1,x+n);
    if(x[n]-x[1]<=17) fout<<"0"<<endl;
    else{
        for (int i=8;i<=N-9;i++){
            r=min(res(i),r);
        }
        fout<<r<<endl;
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值