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
output
input
output
题意:
+ 为加入一个人聊天,- 为这个人退出聊天,如果一个人在聊天中,他说一句话,其中所有人(包括自己)都能收到,问整个过程,所有人收到的信息的总长度为多少
使用set 和string 会比较简单,对c++的这些模块不太熟练,写的代码有点奇怪...
这样也是可以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;
}
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;
}
相关文章推荐
- Django CSRF cookie not set.错误
- django相关字段解释(slug)
- django博客功能实现——标签功能
- golang 图片处理,剪切,base64数据转换,文件存储
- golang遇到的win下读取txt字符乱码的问题
- Goolge 官方发布的SwipRefreshLayout下拉刷新,格外添加上拉加载功能
- good 博客
- django admin中配置搜索域是一个外键时如何处理
- poj1179-polygon(动态规划)
- Google的MultiDex方案的一点研究与思考
- GO语言函数与类型
- Maven使用Cargo实现自动化部署到Web容器
- Go语言概览——《Java程序员学习Go》之一
- digoal -阿里云postgrel大神
- 【二次开发】去除flexpaper的LOGO,双页模式下不再出现
- golang学习之struct
- DjangoUnicodeDecodeError <TableTest>
- Django学习,HelloWorld应用
- 5.django笔记之form保存表单信息,动态select
- django1.9.0时间与系统时间相差8小时问题