WY77. 相等序列
描述
题目给定a1,a2...an,这样一个长度为n的序列,现在你可以给其中一些元素加上一个值x(只能加一次),然后可以给另外一些值减上一个值x(只能减一次),剩下的元素不能再进行操作。问最后有没有可能找到一个值x使所有元素的值相等。输入描述
输出描述
输出k行,每行一个YES或者NO示例1
输入:
1 5 1 3 3 2 1
输出:
YES
C 解法, 执行用时: 35ms, 内存消耗: 704KB, 提交时间: 2021-09-21
#include <stdio.h> #include <stdbool.h> int max(int a,int b,int c) { if(a>b && a>c) return a; if(b>a && b>c) return b; return c; } int min(int a,int b,int c) { if(a<b && a<c) return a; if(b<a && b<c) return b; return c; } int main() { int k; while(scanf("%d",&k)!=EOF) { while(k--) { int n; scanf("%d",&n); int arr[n],index=0; int a=-1,b=-1,c=-1; bool flag=true; while(index<n) { scanf("%d",&arr[index]); if(a==-1 && arr[index]!=a) { a=arr[index]; index++; continue; } if(arr[index]==a) { index++; continue; } if(b==-1 && arr[index]!=b) { b=arr[index]; index++; continue; } if(arr[index]==b) { index++; continue; } if(c==-1 && arr[index]!=c) { c=arr[index]; index++; continue; } if(arr[index]==c) { index++; continue; } flag=false; index++; } if(!flag) { printf("NO\n"); continue; } if(a!=-1 && b!=-1 && c!=-1) { int maxn=max(a,b,c); int minn=min(a,b,c); int mid; if(a!=maxn && a!=minn) mid=a; if(b!=maxn && b!=minn) mid=b; if(c!=maxn && c!=minn) mid=c; if((maxn-mid)!=(mid-minn)) printf("NO\n"); else printf("YES\n"); continue; } printf("YES\n"); } } }
C++ 解法, 执行用时: 35ms, 内存消耗: 2952KB, 提交时间: 2020-07-10
#include<stdio.h> int main(){ int k; scanf("%d",&k); while(k--){ int a[100001]; int n; for(int i=0;i<100001;i++){ a[i]=0; } scanf("%d",&n); for(int i=0;i<n;i++){ int num; scanf("%d",&num); a[num]=1; } int num[5]; for(int i=0;i<5;i++){ num[i]=0; } int j=0; for(int i=0;i<100001;i++){ if(a[i]==1){ if(j>3){ break; } num[j]=i; j++; } } if(j>3){ printf("NO\n"); } if(j>=0&&j<3){ printf("YES\n"); } if(j==3){ if(num[2]-num[1]==num[1]-num[0]){ printf("YES\n"); } else{ printf("NO\n"); } } } return 0; }