NC21681. Build Pylons
描述
现在给你tokitsukaze想要建造n个水晶塔的位置,请你安排一个合理的修建顺序,使得tokitsukaze建造完所有水晶塔的总时间最小(完成建造是指所有建造折跃完毕)。
输入描述
第一行输入一个T(1≤T≤20),表示有T组数据。
对于每组数据,第一行是两个正整数n,k(1≤n≤1000,1≤k≤10^5),表示tokitsukaze想要建造n个水晶塔,并且每个水晶塔的折跃时间为k。
接下来一行n个用空格隔开的正整数pos[i](1≤pos[i]≤10000),表示第i个水晶塔的位置为pos[i]。
输出描述
对于每组数据,tokitsukaze建造所有建筑最少花费多少时间。
示例1
输入:
2 3 3 2 1 6 1 20 15
输出:
20 20
说明:
对于第一个样例,tokitsukaze的最优策略为:C++14(g++5.4) 解法, 执行用时: 7ms, 内存消耗: 376K, 提交时间: 2020-09-21 14:59:13
#include<bits/stdc++.h> using namespace std; const int N = 1e4+5; const double INF=1e20+5; typedef long long ll; int sz[N]; int main() { int t,n,k; cin>>t; while(t--) { cin>>n>>k; for(int i=0; i<n; i++) cin>>sz[i]; sort(sz,sz+n); int sum=0; for(int i=1; i<n; i++) { sum+=pow(sz[i]-sz[i-1],2); } cout<<sum+k<<endl; } }
C++11(clang++ 3.9) 解法, 执行用时: 11ms, 内存消耗: 376K, 提交时间: 2020-02-18 21:17:27
#include<bits/stdc++.h> using namespace std; long long a[1005]; int main() { int T; cin>>T; while(T--) { int n,k; cin>>n>>k; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); long long sum=0; for(int i=0;i<n-1;i++) { sum+=(a[i+1]-a[i])*(a[i+1]-a[i]); } cout<<sum+k<<endl; } }
Python3(3.9) 解法, 执行用时: 27ms, 内存消耗: 3052K, 提交时间: 2021-03-12 16:20:46
for _ in range(int(input())): n,k=map(int,input().split()) an=list(map(int,input().split())) an.sort() t=0 for i in range(n-1): c=an[i+1]-an[i] t+=c*c print(t+k)