2153 - 红尘客栈

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

剑出鞘 恩怨了 谁笑

我只求今朝 拥你入怀抱

红尘客栈风似刀 骤雨落 宿命敲

任武林谁领风骚 我却只为你折腰

过荒村野桥 寻世外古道

远离人间尘嚣 柳絮飘 执子之手逍遥 

——周杰伦《红尘客栈》

古代的侠客们,大多数都是各地行侠仗义的,他们会往返于各地的客栈之间。来无影去无踪,老板算起钱来也比较困难。

但老板们多数情况下都有一个账本,用来计算人员的流动情况。来时,记一下名字。走时,再记一下名字,点一点,就可以看出到底有几个人在住店。这里就有一个账本,不妨可以统计一下。

题目输入

只有1组输入数据。

输入数据的第一行是一个数据T,表示有账本有T列名字。

每个名字占一行,由长度不超过20的大小写英文字母组成,客人名字忽略大小写,CindycinDY视为一个人。

题目输出

在单独的一行输出还有几个人在住店。

(比如样例中,David出现了两次,说明他来了,又走了。Alice出现了三次,说明她来了,又走了,又来了。)

输入/输出样例

输入格式

5
David
Alice
David
Alice
Alice

输出格式

1

C语言解答

#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main(void)
{
    int i,n,sum=0,x=0;
    int d[1000];
    char a[1000][25];
    char s[100][25];
    scanf("%d",&n);
    memset(d,0,sizeof(d));
    for(i=0;i<n;i++)
    {
        int j,flag=0;


        scanf("%s",s[i]);
        for(j=0;j<strlen(s[i]);j++)
            s[i][j]=toupper(s[i][j]);

        for(j=0;j<x;j++)
            if(strcmp(a[j],s[i])==0) {if(d[j]%2!=0) sum++; else sum--; d[j]++;flag=1;}
            if(flag==0) {strcpy(a[x++],s[i]);sum++;}

    }
printf("%d\n",sum);
    return 0;
}

C++解答

#include<stdio.h>
#include<map>
#include<string>
#include<string.h>
char s[27];
using namespace std;
int main()
{
	int t;
	scanf("%d",&t);
	map<string,int>mp;
	for(int i=1;i<=t;i++)
	{
		scanf("%s",s);
		for(int i=0;i<strlen(s);i++)
			if(s[i]>='a'&&s[i]<='z')
				s[i]-=32;
		mp[s]++;
	}
	map<string,int>::iterator it;
	int count=0;
	for(it=mp.begin();it!=mp.end();it++)
		if((it->second)%2!=0)
			count++;
	printf("%d\n",count);

}