您的位置:首页 > 编程语言 > Go语言

5A - Chat Servers Outgoing Traffic

2016-06-14 19:52 399 查看
A. Chat Server's Outgoing Traffic

time limit per test
1 second

memory limit per test
64 megabytes

input
standard input

output
standard output

Polycarp is working on a new project called "Polychat". Following modern tendencies in IT, he decided, that this project should contain chat as well. To achieve this goal, Polycarp has spent several hours in front of his laptop and implemented a chat server
that can process three types of commands:

Include a person to the chat ('Add' command).

Remove a person from the chat ('Remove' command).

Send a message from a person to all people, who are currently in the chat, including the one, who sends the message ('Send' command).

Now Polycarp wants to find out the amount of outgoing traffic that the server will produce while processing a particular set of commands.

Polycarp knows that chat server sends no traffic for 'Add' and 'Remove' commands. When 'Send' command is processed, server sends l bytes
to each participant of the chat, where l is the length of the message.

As Polycarp has no time, he is asking for your help in solving this problem.

Input

Input file will contain not more than 100 commands, each in its own line. No line will exceed 100 characters. Formats of the commands will be the following:

+<name> for 'Add' command.

-<name> for 'Remove' command.

<sender_name>:<message_text> for 'Send' command.

<name> and <sender_name> is a non-empty sequence of Latin
letters and digits. <message_text> can contain letters, digits and spaces, but can't start or end with a space. <message_text> can
be an empty line.

It is guaranteed, that input data are correct, i.e. there will be no 'Add' command if person with such a name is already in the chat, there will be no 'Remove' command
if there is no person with such a name in the chat etc.

All names are case-sensitive.

Output

Print a single number — answer to the problem.

Examples

input
+Mike
Mike:hello
+Kate
+Dmitry
-Dmitry
Kate:hi
-Kate


output
9


input
+Mike
-Mike
+Mike
Mike:Hi   I am here
-Mike
+Kate
-Kate


output
14


题意:

+ 为加入一个人聊天,- 为这个人退出聊天,如果一个人在聊天中,他说一句话,其中所有人(包括自己)都能收到,问整个过程,所有人收到的信息的总长度为多少

使用set 和string 会比较简单,对c++的这些模块不太熟练,写的代码有点奇怪...

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<set>
#include<string>
using namespace std;
int local(char s[])
{
for(int i=0;s[i];++i)
{
if(s[i]==':')
{
return i;
}
}
}
int main()
{
set<string> vis;
char s[205];
int ans=0;
while(gets(s))
{
if(s[0]=='+')//增加一个人
{
string tp=s+1;
vis.insert(tp);
}
else if(s[0]=='-')
{
string tp=s+1;
vis.erase(tp);
}
else
{
int st=local(s);// 冒号的位置
string tp(s,s+st);
if(vis.count(tp))
{
ans+=strlen(s+st+1)*vis.size();
}
}
}
cout <<ans<<endl;
return 0;
}


这样也是可以AC的

#include<cstdio>
#include<cstring>
int main()
{
int ans=0,cnt=0;
char s[205];
while(gets(s))
{
if(s[0]=='+')
{
++cnt;
}
else if(s[0]=='-')
{
--cnt;
}
else
{
int tp=0;
for(int i=0;s[i];++i)
{
if(s[i]==':')
{
tp=i;
break;
}
}
ans=ans+cnt*strlen(s+tp+1);
}
}
printf("%d\n",ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: