单词数

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 64807    Accepted Submission(s): 16239

Problem Description

lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。

Input

有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。

Output

每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。

Sample Input

you are my friend
#

Sample Output

4

Author

Lily

Source

浙江工业大学网络选拔赛

Recommend

linle

这道题要注意段前空格,段中空格和段后空格

以下代码超时(Time limited exceeded),超时原因在于while(cin>>s)效率太低

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;const int maxn=100000;int main()
{std::ios::sync_with_stdio(false);char c;while(c=cin.peek()){if(c=='#') break;int n(0);string word[100];int t(1);int flag=0;string s;while(cin>>s){if(n==0){word[n++]=s;}else{int i;for(i=0;i<n;i++){if(word[i]==s){break;}}if(n==i)word[n++]=s;}c=cin.peek();if(c=='\n')break;while(c==' '){getchar();c=cin.peek();}if(c=='\n')break;}cout<<n<<endl;}return 0;
} 

改进后的代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;const int maxn=10000;int main()
{char s[maxn];while(cin.getline(s,maxn)) {if(s[0]=='#') break;char word[maxn][50];char * p;p=strtok(s," ");int n(0);while(p) {if(n==0) strcpy(word[n++],p);else {int i;for( i=0; i<n; i++) {if(strcmp(word[i],p)==0) {break;}}if(n==i)strcpy(word[n++],p);}p=strtok(NULL," ");}cout<<n<<endl;}return 0;
}

用C++中的set容器

/* HDU2072 单词数 */#include <iostream>
#include <cstdio>
#include <sstream>
#include <set>using namespace std;int main()
{string s;while(getline(cin, s) && s != "#") {istringstream sin(s);set<string> words;string w;while(sin >> w)words.insert(w);cout << words.size() << endl;}return 0;
}
/* HDU2072 单词数 */#include <cstdio>
#include <cstring>
#include <iostream>
#include <set>
#include <string>using namespace std;int main(void)
{char buf[1024];char pound[] = "#";char delim[] = " ";char *p;set<string> words;while(gets(buf) != NULL) {if(strcmp(buf, pound) == 0)break;words.clear();p = strtok(buf, delim);while(p) {words.insert(p);p = strtok(NULL, delim);}cout << words.size() << endl;}return 0;
}

不运用set

#include<iostream>
#include<string>
using namespace std;int main ()
{char *c=NULL,*d=NULL;  //指针初始化!!!char a[81];char b[41][81];int i,j,k,len,count;while(gets(a)){if(a[0]=='#') break;len=strlen(a);for(i=len-1;i>=0;i--)  //最后的空格,去掉{if(a[i]==' ')a[i]=NULL;elsebreak;}len=strlen(a);if(len==0){cout<<0<<endl;continue;}for(i=0;i<len;i++) //开始的空格,去掉{if(a[i]==' ')a[i]=NULL;else{d=a+i;break;}}len=strlen(d);    //中间的空格,赋NULL,并记录单词d[len]=' ';d[len+1]=NULL;c=d;j=0;for(i=0;i<=len;i++){if(d[i]==' ')  {d[i]=NULL;if(d[i+1]!=' '){strcpy(b[j],c);j++;c=d+i+1;}}}count=j;       //处理单词,相同的记一次for(i=0;i<j;i++)         {for(k=i+1;k<j;k++){if(strcmp(b[i],b[k])==0 && b[k][0]!='#'){count--;b[k][0]='#';    //#是标志,表示该相同单词已被减过,不能再减}}}cout<<count<<endl;}return 0;
}

HDU 2072 单词数相关推荐

  1. HDU 2072 单词数 Trie 如何debug一颗Trie

    单词数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  2. HDU 2072 单词数

    单词数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  3. hdu 2072单词数

    单词数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  4. HDU - 2072 -- 单词数【set or 字典树】

    单词数 Description lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数.下面你的任务是帮助xiaoou333解决这个问题. Inpu ...

  5. hdu 2072 单词数

    http://acm.hdu.edu.cn/showproblem.php?pid=2072 单词数这道题感觉用c写很麻烦,用c++写就比较简单了.不多说,直接贴代码. #include<ios ...

  6. hdu 2072 单词数(C语言)

    Problem Description lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数.下面你的任务是帮助xiaoou333解决这个问题. ...

  7. 杭电oj HDOJ 2072 单词数

    杭电oj HDOJ 2072 单词数 Problem Description lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数.下面你的任务是 ...

  8. 杭电oj2072c语言,杭电acm 2072(单词数)

      #include//此种解法dsds# dsds是可以输入的,但是HDOJ也通过了.下面的解法解决了此问题. #include #include using namespace std; int ...

  9. HDOJ 2072 单词数

    Problem Description lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数.下面你的任务是帮助xiaoou333解决这个问题. ...

最新文章

  1. 链表倒数第k个节点_面试题 02.02. 返回倒数第 k 个节点
  2. poj1274(最大匹配)
  3. unity中app实现拖拽_10分钟让你实现在APP中对网络状态变化进行全局提示
  4. python打印浮点数_python – 打印整数或带有n位小数的浮点数
  5. 怎么提高面试成功率?
  6. MSChart使用导航之开发
  7. 参考地、保护地、大地的概念
  8. 数据结构与算法笔记(三)—— 链表(单链表、循环链表、双向链表)
  9. Marketing Cloud里CSRF token的获取时机
  10. 戴尔XPS-13超级本赏析
  11. Nginx 高级配置
  12. VIm中Python自动补全插件Pydiction
  13. 一份简短又全面的数学建模技能图谱:常用模型算法总结
  14. Linux查看可执行文件依赖库
  15. matlab imagesc 保存,在matlab中保存imagesc的精确图像输出
  16. A股哪家上市公司年报更亮眼?
  17. 软件开发各种版本规范
  18. 逻辑英语公式R1+R2
  19. 服务器中搭建OA系统,oa系统搭建在云服务器上
  20. ESP32 NVS同windows文件系统的类比,附上一段NVS操作的代码解析

热门文章

  1. vue ---- 将项目打包发布
  2. 数学6年级测试软件,苏教版数学六年级下册2018年小学六年级毕业测试试卷(无答案).doc...
  3. php 瓶颈,使用XHProf查找PHP性能瓶颈
  4. kibana设置中文
  5. RabbitMQ发布/订阅模式(Publish/Subscribe)
  6. mysql中 routine
  7. 如何把include_type_name的值设置为true
  8. 蠕虫mysql_mysql蠕虫复制基础知识点
  9. mysql查询删除重复数据
  10. condition实现通知部分线程