NOIP2011 普及組 統計單詞數

题目描述

一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章

中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )。

输入输出格式

输入格式:

 

输入文件名为stat.in ,2 行。

第1 行为一个字符串,其中只含字母,表示给定单词;

第2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

 

输出格式:

 

输出文件名为stat.out 。

只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从 0 开始);如果单词在文章中没有出现,则直接输出一个整数-1。

 

输入输出样例

输入样例#1:
【输入样例1】 
To 
to be or not to be is a question 
【输入样例2】 
to 
Did the Ottoman Empire lose its power at that time
输出样例#1:
【输出样例1】 
2 0
【输出样例2】 
-1

说明

数据范围

1≤ 单词长度≤10。

1≤ 文章长度≤1,000,000。

noip2011普及组第2题

模擬即可。

注意是獨立單詞,還有它空格和換行。

代碼實現:

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 int q=-1,ans,l,a,b;
 5 char ch[12],cn[12],word;
 6 int main(){
 7     scanf("%s",ch);
 8     l=strlen(ch);
 9     for(int i=0;i<l;i++){
10         if(ch[i]<'a') ch[i]+=32;
11         cn[i]=ch[i]-32;
12     }
13     while(word=getchar()) if(word=='\n') break;
14     while(word=getchar()){
15         b++;
16         if(word==ch[a]||word==cn[a]) a++;
17         else{
18             a=0;
19             if(word!=' '&&word!='\n')
20                 while(word=getchar()){
21                 b++;
22                 if(word==' '||word=='\n') break;
23             }
24         } 
25         
26         if(a==l){
27             word=getchar();b++;
28             if(word!=' '&&word!='\n'){    
29                 while(word=getchar()){
30                     b++;a=0;
31                     if(word==' '||word=='\n') break;
32                 }
33                 continue;
34             } 
35             if(q==-1) q=b-l-1;
36             ++ans;
37             a=0;
38         }
39         if(word=='\n') break;
40     }
41     if(q==-1) printf("-1\n");
42     else printf("%d %d\n",ans,q);
43     return 0;
44 }

建議大家做一下這道非常惡心的題,有助於代碼能力的提高的。

posted @ 2016-12-04 20:32  J_william  阅读(268)  评论(0编辑  收藏  举报