2153 - 红尘客栈
剑出鞘 恩怨了 谁笑
我只求今朝 拥你入怀抱
红尘客栈风似刀 骤雨落 宿命敲
任武林谁领风骚 我却只为你折腰
过荒村野桥 寻世外古道
远离人间尘嚣 柳絮飘 执子之手逍遥
——周杰伦《红尘客栈》
古代的侠客们,大多数都是各地行侠仗义的,他们会往返于各地的客栈之间。来无影去无踪,老板算起钱来也比较困难。
但老板们多数情况下都有一个账本,用来计算人员的流动情况。来时,记一下名字。走时,再记一下名字,点一点,就可以看出到底有几个人在住店。这里就有一个账本,不妨可以统计一下。
Input
只有1组输入数据。
输入数据的第一行是一个数据T,表示有账本有T列名字。
每个名字占一行,由长度不超过20的大小写英文字母组成,客人名字忽略大小写,Cindy和cinDY视为一个人。
Output
在单独的一行输出还有几个人在住店。
(比如样例中,David出现了两次,说明他来了,又走了。Alice出现了三次,说明她来了,又走了,又来了。)
Examples
Input
5 David Alice David Alice Alice
Output
1
Solution 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; }
Solution 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); }