湖南省第十一届程序设计大赛 (水题)聊天止于呵呵
2016-08-25 22:17
295 查看
模拟题老师基本上都不讲,因为只要足够细心,大家都能做对。集训到今天就结束了。这次下来,
发现自己做模拟题已经很有手感了,相较于之前,真的有很大的成长。
简单的分析下这道题,
1、首先,要找出总共有多少段对话,就想到了用map<string, int>来存对话是否出现过,A->B,B->A只要没有出现hehehe...作为结束就属于同一段对话。
2、处理对话内容,把非字母转成空格,大写转小写,然后要把对话拆成单词,看是否是由hehehe...组成,就想到了前段学的stringstream
3、确定每个单词是否是由hehehe组成,这个非常简单,
输入要稍稍注意下,因为对话有空格的所以只能用gets(),或getline()接收,(或者其它我没学的,不以空格结束的接收字符串的)
代码如下:
#include <iostream> #include <sstream> #include <string> #include<cstdio> #include<map> #include<cstring> #include <cmath> using namespace std; map<string, int> cnt; int chi(char c[]) { int clen= strlen(c); if(clen%2!=0) return 0; else { for(int i=0; i<clen-1; i=i+2) { if(c[i]!='h'||c[i+1]!='e') return 0; } return 1; } } int check(char s[]) { int slen=strlen(s); for(int i=0; i<slen; i++) { if(isalpha(s[i])) s[i] = tolower(s[i]); else s[i] = ' '; } stringstream ss(s); char c[1005]; while(ss>>c) { if(chi(c)==1) return 1; } return 0; } int main() { char a, b, s[1005]; double sum=0, cont=0; while((scanf("%c->%c:", &a, &b))!=EOF) { gets(s); string z, y; z += a+b; y += b+a; if((!cnt.count(z)&&!cnt.count(y))||(cnt[y]==0&&cnt[z]==0)) { cnt[y]=1; cnt[z]=1; sum++; } if(check(s)==1) //s串中有hehehe; { cont++; cnt[z]=0; cnt[y]=0; } } printf("%.0lf%%\n", cont/sum*100.0); return 0; }
相关文章推荐
- 湖南省第八届大学生程序设计大赛原题 D - 平方根大搜索 UVA 12505 - Searching in sqrt(n)
- 第九届湖南省ACM—ICPC程序设计大赛 好老师
- 好老师(湖南省第九届程序设计大赛原题)
- 第九届北航程序设计大赛网络预赛——水题题解
- 2010湖南省第六界程序设计大赛 B题 --弟弟的作业(nyoj663)
- 湖南省第六届 中信软件教育杯 大学生程序设计大赛试题 第一题 汽水瓶
- HNNU 11657 简单的图论问题?【湖南省第十一届大学生计算机程序设计竞赛,双BFS】
- 2016湖南省程序设计大赛acm : A题
- 第九届湖南省ACM—ICPC程序设计大赛 搞笑版费马大定理
- 好老师(湖南省第九届程序设计大赛原题)
- HNNU 11658 阶乘除法【湖南省第十一届大学生计算机程序设计竞赛,数论】
- 湖南省第十一届大学生计算机程序设计竞赛—错误的算法
- 湖南省第十一届大学生计算机程序设计竞赛—E - 又一道简单题
- 湖南省第十一届大学生计算机程序设计竞赛(阶乘除法)
- 湖南省第六届程序设计大赛D(台球碰撞)
- HNNU 11662 又一道简单题【湖南省第十一届大学生计算机程序设计竞赛,模拟,暴力】
- 第十一届“蓝狐网络杯”湖南省大学生计算机程序设计竞赛
- 第九届湖南省ACM—ICPC程序设计大赛 搞笑版费马大定理【思维】
- csu 1503: 点弧之间的距离-湖南省第十届大学生计算机程序设计大赛
- 湖南省第六届程序设计大赛D(台球碰撞)