如果一個數列S滿足對於所有的合法的i,都有S[i + 1] = S[i] + d, 這裏的d也可以是負數和零,我們就稱數列S爲等差數列。
小易現在有一個長度爲n的數列x,小易想把x變爲一個等差數列。小易允許在數列上做交換任意兩個位置的數值的操作,並且交換操作允許交換多次。但是有些數列通過交換還是不能變成等差數列,小易需要判別一個數列是否能通過交換操作變成等差數列
輸入描述:
輸入包括兩行,第一行包含整數n(2 ≤ n ≤ 50),即數列的長度。
第二行n個元素x[i](0 ≤ x[i] ≤ 1000),即數列中的每個整數。
輸出描述:
如果可以變成等差數列輸出"Possible",否則輸出"Impossible"。
輸入例子1:
3
3 1 2
輸出例子1:
Possible
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n = 0;
//int elem[50] = {0};
int x = 0;
vector<int> vec;
while(cin >> n){
vec.clear();
for(int i = 0; i < n; ++i){
cin >> x;
vec.push_back(x);
}
sort(vec.begin(), vec.end());
int nMin = vec[0];
int nMax = vec[n - 1];
//int nSum = elem[0];
//for(int i = 1; i < n; ++i){
// if(elem[i] < nMin)
// nMin = elem[i];
// if(elem[i] > nMax)
// nMax = elem[i];
// nSum += elem[i];
//}
//if(((nMin + nMax) * n) / 2 != nSum){
// cout << "Impossible" << endl;
// continue;
//}
int nValue = (nMax - nMin) / (n - 1);
for(int i = 0; i < n; ++i){
int nElem = nMin + i * nValue;
if(find(vec.begin(), vec.end(), nElem) != vec.end()){
if(i == n - 1){
cout << "Possible" << endl;
}
continue;
}
else{
cout << "Impossible" << endl;
break;
}
}
}
return 0;
}