描述
在黑板上写了N个正整数作成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a×b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中,最大的max,最小的为min,则该数列的极差定义为M=max−min。
格式
输入格式
第一行,一个数为N;
第二行,N个数。
输出格式
输出极差。
样例
输入样例
3
1 2 3
输出样例
2
限制
时间限制: 1000 ms
内存限制: 65536 KB
list<int> l1;
list<int> l2;
list<int>::iterator it;
int searchmax(){
list<int>::iterator p=l1.begin();
for(it=l1.begin();it!=l1.end();it++)
if(*p<*it) p=it;
int temp=*p;
l1.erase(p);
return temp;
}
int searchmin(){
list<int>::iterator p=l2.begin();
for(it=l2.begin();it!=l2.end();it++)
if(*p>*it) p=it;
int temp=*p;
l2.erase(p);
return temp;
}
int main(){
int n,temp;cin>>n;
for(int i=1;i<=n;i++){
cin>>temp;
l1.push_back(temp);
l2.push_back(temp);
}
while(l1.size()>1){
int a=searchmax();
int b=searchmax();
l1.push_back(a*b+1);
}
while(l2.size()>1){
int a=searchmin();
int b=searchmin();
l2.push_back(a*b+1);
}
cout<<abs(l1.front()-l2.front());
return 0;
}