NC50166. 数列极差
描述
输入描述
第一行为一个正整数n表示正整数序列的长度;
在接下来的n行中,每行输入一个正整数。
接下来的一行有一个0,表示数据结束。
输出描述
输出只有一行,为相应的极差d。
示例1
输入:
3 1 2 3 0
输出:
2
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 476K, 提交时间: 2020-05-03 09:10:51
#include<iostream> #include<algorithm> using namespace std; int s[50001]; int j[50001]; int cmp(int a,int b){return a>b;} int main() { int n; while(cin>>n&&n) { for(int i=0;i<n;i++) { cin>>s[i]; j[i]=s[i]; } sort(s,s+n); for(int i=1;i<n;i++) { s[i]=s[i]*s[i-1]+1; sort(s+i,s+n); } int max=s[n-1]; sort(j,j+n,cmp); for(int i=1;i<n;i++) { j[i]=j[i-1]*j[i]+1; } int min=j[n-1]; cout<<max-min<<endl; } return 0; }
C++ 解法, 执行用时: 3ms, 内存消耗: 440K, 提交时间: 2021-11-25 15:05:37
#include<bits/stdc++.h> using namespace std; int n; int a[50005],b[50005]; int main() { cin>>n; for(int i=1;i<=n+1;i++) { cin>>a[i]; b[i]=a[i]; } int x=1; while(x!=n-1) { sort(a+x,a+1+n); a[x+1]=a[x]*a[x+1]+1; x++; } x=n; sort(b+1,b+1+x); while(x!=2) { b[x-1]=b[x-1]*b[x]+1; x--; } cout<<a[n]*a[n-1]-b[1]*b[2]; return 0; }
Python3(3.5.2) 解法, 执行用时: 16ms, 内存消耗: 3348K, 提交时间: 2020-08-22 21:44:23
n=int(input()) a=[] b=[] for i in range(n): a.append(int(input())) b=a a=sorted(a,reverse=False) b=sorted(b,reverse=True) for i in range(1,n): a[i]=a[i]*a[i-1]+1 b[i]=b[i]*b[i-1]+1 a=a[:i]+sorted(a[i:],reverse=False) b=b[:i]+sorted(b[i:],reverse=True) maxn=a[-1] minn=b[-1] print(maxn-minn)