• [1645] 聊天止于呵呵

  • 时间限制: 5000 ms 内存限制: 65535 K
  • 问题描述
  • (现代版)俗话说:流言止于智者,聊天止于呵呵。输入一段聊天记录,你的任务是数一数有

    多少段对话“止于呵呵”,即对话的最后一句话包含单词 hehe 或者它的变形。

    具体来说,我们首先提取出对话的最后一句话,把所有非字母的字符替换成空格,把所有字符 替换成小写,然后导出一个单词列表(由空格隔开),只要列表中的任何一个单词是 hehe,这 段对话就算作“止于呵呵”。比如,"Hi! Are you OK?" 会变成四个单词:hi, are, you, ok。注 意,单词列表可以是空的(比如,这句话是:"?!?!!")

    有些人喜欢使用 hehe 的变形,这些变形也应被视为“呵呵”。为了简单起见,本题只考虑由 n(n>1)个 he 连接而成的单词,比如 hehehe 或者 hehehehe。注意,以 hehe 为连续子串的其他单 词不应视为“呵呵”,比如 hehee,或者 ehehe。

    每两个不同人之间的所有对话算作“一段对话”。 
  • 输入
  • 输入仅包含一组数据,每行是一句对话,格式为: 
    人名1->人名2: 一句话.
    每行最多包含 1000 个字符,最多 100 行。
  • 输出
  • 输出“止于呵呵”的对话段落所占的百分比,四舍五入到最近的整数。输入数据保证答案不会
    同时和两个整数最近。
  • 样例输入
  • A->B: Hello!
    A->C: Hi!
    B->A: Hehe
    B->D: Hei!
    D->B: How are you?
    A->C: Hi???
    A->C: Are you there?
    B->D: Hehehei!
    D->B: What does hehehei mean?
    F->E: I want to hehehehehe yah.
  • 样例输出
  • 50%
  • 提示
  • 样例解释
    A 和 B 之间的最后一句话是"Hehe".
    A 和 C 之间的最后一句话是"Are you there?".
    B 和 D 之间的最后一句话是"What does hehehei mean?".
    E 和 F 之间的最后一句话是"I want to hehehehehe yah". 最后第一段和最后一段话是“止于呵呵”的(注意最后一段对话是以呵呵的变种结束),因此 比例是 50%。

map记录每一场对话,重定向来判断每句是否出现hehe。

代码:

#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<cmath>
#include<queue>
#include<set>
#include<map>
using namespace std;
typedef long long LL;
#define INF 0x3f3f3f3f
inline int ishehe(string &s)
{
int len=s.size();
if(len%2!=0||len<=2)
return 0;
for (int i=0; i<len; i++)
{
s[i]=tolower(s[i]);
}
for (int i=0; i<len; i+=2)
{
if(!(s[i]=='h'&&s[i+1]=='e'))
return 0;
}
return 1;
}
inline string change(string &s)
{
string t,a,b;
int len=s.size();
for (int i=0; i<len; i++)
{
if(s[i]=='-'&&s[i+1]=='>')
{
s[i]=' ';
s[i+1]=' ';
}
if(s[i]==':')
s[i]=' ';
}
istringstream sin(s);
sin>>a>>b;
if(a<b)
{
t=t+a+b;
}
else
{
t=t+b+a;
}
return t;
}
int main(void)
{
string name,remark,sho,tname;
int cnt=0;
map<string,int>pos;
map<string,int>::iterator it;
while (getline(cin,name,' '))
{
getline(cin,remark);
istringstream ssin(remark);
tname=change(name);
pos[tname]=0;
while (ssin>>sho)
{
if(ishehe(sho))
{
pos[tname]=1;
break;
}
}
}
for (it=pos.begin(); it!=pos.end(); it++)
{
if(it->second==1)
{
cnt++;
}
}
printf("%.0lf%%\n",cnt*1.0*100/pos.size());
return 0;
}

NOJ——聊天止于呵呵(string流重定向+map,水题)的更多相关文章

  1. codeforces 637B B. Chat Order(map,水题)

    题目链接: B. Chat Order time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  2. hdu 1004 颜色与数字(map水题)

    Sample Input5 //Tgreenredblueredred 统计颜色的次数 输出最多的颜色3pinkorangepink0 Sample Outputred pink # include ...

  3. HDU 1029 某个数出现的次数大于等于(N+1)/2的是哪个 map水题

    题意:输入n个数 n为奇数 问某个数出现的次数大于等于(N+1)/2的是 哪个 输出来Sample Input51 3 2 3 3111 1 1 1 1 5 5 5 5 5 571 1 1 1 1 1 ...

  4. HDOJ/HDU 1251 统计难题(字典树啥的~Map水过)

    Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己 ...

  5. Java I/O(二)其他常用的输入输出流PrintStream等、标准流重定向

    四.FilterOutputStream.PrintStream PrintStream是继承自FilterStream类的,例如标准输出流System.out就是著名的PrintStream类对象. ...

  6. Java(45)JDK新特性之String流

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201671.html 博客主页:https://www.cnblogs.com/testero ...

  7. Java_lambda表达式之"stream流学习,Map学习,collect学习,Conllectors工具类学习"

    Lambda表达式学习 对List<Integer> userIdList = UserList.stream().map(User::getUserId).collect(Collect ...

  8. 实例学习SSIS(四)--使用日志记录和错误流重定向

    原文:实例学习SSIS(四)--使用日志记录和错误流重定向 导读: 实例学习SSIS(一)--制作一个简单的ETL包 实例学习SSIS(二)--使用迭代 实例学习SSIS(三)--使用包配置 实例学习 ...

  9. hdu--1258--Sum It Up(Map水过)

    Sum It Up Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

随机推荐

  1. JavaScript对象属性

    JavaScript对象的属性有两类:数据属性和访问器属性 数据属性 数据属性有四个特性,分别为: [[value]]属性的值 [[writeable]]属性是否可以修改 [[enumerable]] ...

  2. MovieReview—Ghost in the Shell(攻壳机动队:笑脸男事件,个别的11人事件)

    AI with Wisdom         I have recently watched two films in the series of Ghost in the Shell, Smilin ...

  3. gzip, gunzip, zcat - 压缩或展开文件

    总揽 gzip [ -acdfhlLnNrtvV19 ] [-S 后缀] [ 文件名 ... ] gunzip [ -acfhlLnNrtvV ] [-S 后缀] [ 文件名 ... ] zcat [ ...

  4. 为管理复杂组件状态困扰?试试 vue 简单状态管理 Store 模式【转】

    https://juejin.im/post/5cd50849f265da03a54c3877 在 vue 中,通信有几种形式: 父子组件 emit/on vuex 中共享 state 跨组件 Eve ...

  5. python基础一 day15 复习

    迭代器和生成器迭代器 可迭代协议 —— 含有iter方法的都是可迭代的 迭代器协议 —— 含有next和iter的都是迭代器 特点 节省内存空间 方便逐个取值,一个迭代器只能取一次.生成器 —— 迭代 ...

  6. Django 模板函数

    Django 模板函数 在模板中的函数是只需要函数名,不用加括号,自动执行 在前端中的函数 不用加括号,函数自动执行 前端 {% for item in userinfo.keys %} <h3 ...

  7. Launch Instance---source for openstack

    If you want to create an instance that uses ephemeral storage, meaning the instance data is lost whe ...

  8. Java基础操作面试题:Map集合排序 需要TreeMap 构造方法参数有比较器 输入字符串,统计A、B、C、D、出现次数,由高到低输出字母和出现次数,使用Map集合完成此题

    Map和Collections是同级别的,不能像List排序那样直接用Collections.sort(new Comparator<?>(){ 复写compara方法}); HashMa ...

  9. 使用xcode 8 调试ios10

    这几天更新了ios10,发现真机不能调试,弹出几个错,表示没有证书.用ios9的真机能调试, 真他么坑,总结一下解决方法. 在BuildSetting 的Signing中Code Signing Id ...

  10. 经常用到的js函数

    //获取样式 function getStyle(obj,attr){ if(obj.currentStyle){ return obj.currentStyle[attr]; }else{ retu ...