题目限制
时间限制 | 内存限制 |
1000ms | 128MB |
题目描述
对于一个包含 n>0 个元素的整数序列,如果序列中相邻元素之差的绝对值取遍从1到n-1的所有整数,那么这个序列就叫做优美序列。例如:1 4 2 3 就是一个优美序列,因为相邻元素之差的绝对值分别为 3 2 1。这个定义意味着所有单元素序列都是一个优美序列。写一个程序来判断一个序列是不是优美序列。
输入格式
若干行(不超过500行);
每一行第一个数是 n ,接下来 n 个整数,分别表示一个序列。数的绝对值不超过 5×10^6 。
输出格式
对应于输入文件中的每一行,每行输出 YES
或 NO
,表示输入文件中的每一行的输入序列,是否是优美序列。
样例数据
输入样例 #1 | 输出样例 #1 |
---|---|
4 1 4 2 3 5 1 4 2 -1 6 | YES NO |
样例分析
如上所述。
数据范围
100%数据满足:2≤n≤3000
解题:
#include<bits/stdc++.h>
using namespace std;
int n,a[3005],j;
bool f[3005],g=true;
int main(){
while(cin>>n){
g=true;
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;i<n;i++){
if(abs(a[i]-a[i+1])<3000){
f[abs(a[i]-a[i+1])]=true;
}else{
g=false;
break;
}
}
if(g){
for(int i=1;i<n;i++){
if(!f[i]){
g=false;
break;
}
}
}
if(g){
printf("YES\n");
}else{
printf("NO\n");
}
}
return 0;
}