Water(过半元素)

【题七】Water

泉州第一中学 刘家昌

                     

        题目名称           文件名                   时间限制    内存限制

        Water     water.*{in,out,c,cpp,pas}          5s          8MB

题目描述

    百度百科的「灌水」条目如此说道:

    灌水的英文叫做「addwater」,根据网络耆老口耳相传,此乃与美国前任总统里根大有关系。据说里根是个 BBS 爱好者,在总统任内常喜欢利用电子布告栏微服出巡,了解民生疾苦;他也用「addwater」这个 ID 结交了不少网友。直到里根卸任之后,他才向几个好友透露这个事情,一时间内,攀关系的、有仇的等各种各样网友纷纷发 E-mail,post 给站长,悲哀的站长不好不看信,只能全盘接受了,终于,这个站被弄垮了。好像后来里根有补偿这位可怜的站长,就这样「addwater」的威名就传开了,传到台湾后,就形成了「灌水」。

  而维基百科没有这样的介绍,笔者便不得不怀疑其真实性。Google~后,无论是「addwater」,「forum add water」,「bbs add water」或者是「Reagan(里根) addwater」都没有找到相关的内容。

Water(过半元素)_第1张图片

 

    除了无力吐槽网友无与伦比的想象力外,考虑这样一个与背景有(mei)不(pi)少(dian)联系的问题:

    某「水王」发帖数目超过了帖子总数的一半。如果你获得一个当前论坛上所有帖子作者ID的输入(区分大小写),你能快速找出这个传说中的水王吗?

  当然,这个论坛的帖子数在水王的狂轰滥炸后也(jing)只(ran)有五百万了而(wo)已(cao),你的系统管理员也只是不小心把你的内存资源配额的 8 GB 打成了 8 MB 罢了,而由于服务器 CPU 资源太宝贵,你的BOSS要求你的程序在5秒之内完成任务。

输入格式

  测试点有多组数据,对于每组数据:

  第一行一个正整数N。表示帖子数。

  接下来N行,每行一个长度不大于10的字符串,表示一个帖子作者的ID。

  测试点以0结束。

输出格式

  输出仅一个字符串,表示「水王」的 ID。

样例输入

  5

 add_water

 add_water

 admin

 helloworld

  add_water

  0

样例输出

 add_water

数据规模

     测试点  分值  N      测试数据组数

     small     20  <=20         2

     large     30  <=3,000,000    3

     huge     50  <=5,000,000    5

  保证「水王」发帖数严格大于半数。

  保证字符串不包含空格和其他空白字符。


内存问题1:

定理1:若一个堆中某数出现次数过半,则任意删去2个不同的元素,该元素仍过半

#include<stdio.h>
#include<string.h>
int n,size;
char s1[11],s2[11];
int main()
{
	freopen("water.in","r",stdin);
	freopen("water.out","w",stdout);
	while (scanf("%d",&n)!=EOF&&n)
	{
	//	printf("%d",n);
		size=0;
		while (n--)
		{
			scanf("%s",s1);
			if (!size)
				size++,strcpy(s2,s1);
			else if (!strcmp(s1,s2)) size++;
			else size--;
		//	if (n==0) printf("%s",s1); 
		}
		printf("%s\n",s2);
	}
//	fclose(stdin);
//	fclose(stdout);
	
	return 0;
}

该题数据有误?(wocao)所以必须判定最后没0的情况……


 

你可能感兴趣的:(Water(过半元素))