游客 Signup | Login
中文 | En

2042 - β原子

在ACM的世界里有一种非常不稳定的原子,叫做β原子,这种原子的贮存有很多限制,他们必须横向排列在一个专用的管道内,每一个β原子都有左右两个相邻的β原子(头尾除外),β原子有一种属性叫做震荡值,两个相同震荡值的β原子相邻的话,这两个β原子就会相互碰撞,最后两个β原子都会湮灭。起初所有的β原子处于沉睡状态,当你通电后,他们就处于活跃状态,和相邻的原子发生反应。你的任务就是,看看这一排β原子在经过有限次相邻原子交换后是否可以通电(通电后他就会和周围相同震荡值的原子发生反应,我们为了避免反应,就不会通电)

Input

 第一行一个整数N,代表接下来有N(1  N  100)个β原子

 第二行N个整数(a1, a2, a3, .........an)表示每个原子的震荡值(1  an 1000

Output

如果可以通电输出“YES”, 不可以输出“NO”(没有双引号)

Examples

Input

3
1 1 2
4
7 7 7

Output

YES
NO

Solution 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");
	}
}

Solution 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"); 
    } 
} 

Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题