2042 - β原子
时间限制 : 1 秒
内存限制 : 128 MB
在ACM的世界里有一种非常不稳定的原子,叫做β原子,这种原子的贮存有很多限制,他们必须横向排列在一个专用的管道内,每一个β原子都有左右两个相邻的β原子(头尾除外),β原子有一种属性叫做震荡值,两个相同震荡值的β原子相邻的话,这两个β原子就会相互碰撞,最后两个β原子都会湮灭。起初所有的β原子处于沉睡状态,当你通电后,他们就处于活跃状态,和相邻的原子发生反应。你的任务就是,看看这一排β原子在经过有限次相邻原子交换后是否可以通电(通电后他就会和周围相同震荡值的原子发生反应,我们为了避免反应,就不会通电)
题目输入
第一行一个整数N,代表接下来有N(1 ≤ N ≤ 100)个β原子
第二行N个整数(a1, a2, a3, .........an)表示每个原子的震荡值(1 ≤ an≤ 1000)
题目输出
如果可以通电输出“YES”, 不可以输出“NO”(没有双引号)
输入/输出样例
输入格式
3 1 1 2 4 7 7 7
输出格式
YES NO
C语言解答
#include<stdio.h> #include<string.h> #include<math.h> int num2[1010]; int max(int a) { int result; result=num2[0]; for(int i=0;i<a;i++) { if(num2[i]>result) result=num2[i]; } return result; } main() { int num1[1010],count; float n; while(scanf("%f",&n)!=EOF) { memset(num2,0,sizeof(int)*1010); for(int i=0;i<n;i++) { scanf("%d",&num1[i]); int count=0; for(int j=0;j<i;j++) if(num1[j]==num1[i]) count++; num2[i]=count+1; } if(max(1010)<=ceil(n/2)) puts("YES"); else puts("NO"); } }
C++解答
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int V = 1000 + 50; int n, sum[V]; int main() { int i, j; while(~scanf("%d", &n)) { memset(sum, 0, sizeof(sum)); for(i = 0; i < n; ++i) { int temp; scanf("%d", &temp); sum[temp]++; } int Max = 0; for(i = 1; i <= 1000; ++i) Max = max(Max, sum[i]); if(Max <= (n + 1) / 2) printf("YES\n"); else printf("NO\n"); } }