poj3371
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 2269 | Accepted: 710 |
Description
.
As can be inferred from the above formula, a passage with a high Flesch Reading Ease score tends to favor shorter sentences and words, which is in compliance with commonsense in spite of partial accuracy. (Think of, for instance, the word "television". Long as it may seem, it is indeed one of the first words that any individual who studies English learns.) A related Wikipedia entry on Flesch Reading Ease [1] suggests that passages scoring 90~100 are comprehensible for an average American 5th grader, and 8th and 9th graders possess the ability to follow passages with a score in the range of 60~70, whereas passages not exceeding 30 in the score are best suitable for college graduates. The text of this problem, all sections taken into account, scores roughly 50 as per the calculation of Google Documents.
Despite the simplicity in its ideas, several aspects of its definition remains vague for any real-world implementation of Flesch Reading Ease. For the sake of precision and uniformity, the following restrictions adapted from [2] are adopted for this problem, to which you are to write a solution that effectively computes the Flesch Reading Ease score of a given passage of English text.
- Periods, explanation points, colons and semicolons serve as sentence delimiters.
- Each group of continuous non-blank characters with beginning and ending punctuation removed counts as a word.
- Each vowel (one of a, e, i, o, u and y) in a word is considered one syllable subject to that
- -es, -ed and -e (except -le) endings are ignored,
- words of three letters or shorter count as single syllables,
- consecutive vowels count as one syllable.
References
- Wikipedia contributors. Flesch-Kincaid Readability Test. Wikipedia, The Free Encyclopedia. August 30, 2007, 01:57 UTC. Available at: http://en.wikipedia.org/w/index.php?title=Flesch-Kincaid_Readability_Test&oldid=154509512. Accessed September 5, 2007.
- Talburt, J. 1985. The Flesch index: An easily programmable readability analysis algorithm. In Proceedings of the 4th Annual international Conference on Systems Documentation. SIGDOC '85. ACM Press, New York, NY, 114-122.
Input
Output
digits beyond decimal point.
Sample Input
Flesch Reading Ease, a readability test named after its deviser Rudolf Flesch,
is among most ubiquitously used readability tests, which are principally
employed for assessment of the difficulty to understand a reading passage
written in English. The Flesch Reading Ease score of a passage relies solely
on three statistics, namely the total numbers of sentences, words and
syllables, of the passage.
Sample Output
26.09
Source
大致题意:
给出一篇规范的文章,求其 句子数、单词数 和 音节数把这3个值代入题目给出的公式,输出其结果,保留2位小数。
标记单词分隔符: 逗号(,) 和 空格( )
句子分隔符:句号(.) 问号(?) 冒号(:) 分号(;) 感叹号(!)
音节处理要求:
(1)当单词总长度<=3时,音节数无条件+1
(2)
当单词总长度>3时,单词中每出现一个元音字母(a、e、i、o、u、y),音节数+1,但是连续的(>=2)元音字母只按1个音节计算,且当单词后缀为-es、-ed和-e时,后缀的元 音字母e不列为音节数计算。但是后缀-le例外,要计算音节数。
解题思路:
注意:
由于用while(cin>>msg)输入文章,因此是按 空字符
把文章分开若干片段,直到出现EOF时才结束输入,因此msg中的单词分隔符不会出现空格,只要当msg最后一个字符为字母时,就说明此时的单词分隔符为空格。
音节数是最难处理的,其规律如下:
(1) 当单词总长度<=3时,音节数无条件+1
(2)
当单词总长度>3时,单词中每出现一个元音字母(a、e、i、o、u、y),音节数+1,但是连续的元音字母只按1个音节计算,且当单词后缀为-es、-ed和-e时,后缀的元音字母e不列为音节数计算。但是后缀-le例外,要计算音节数。
注意:
(1)元音字母要判断12个,6个小写,6个大写。
(2)输入的文章每个字符只能扫描一次,若重复扫描会超时。
(3)G++用%.2f
; C++用%.2lf
AC代码+详细注释:
#include<cstdio>
#include<iostream>
using namespace std;
char msg[];
int word=;//单词数
int sentance=;//句子数
int syllable=;//音标数
bool isalpha(char ch){//检查字符ch是否为字母
if(ch>='A'&&ch<='Z') return ;
if(ch>='a'&&ch<='z') return ;
return ;
}
bool isvowel(char ch){//检查字符ch是否为元音字母
if(ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u'||ch=='y') return ;
if(ch=='A'||ch=='E'||ch=='I'||ch=='O'||ch=='U'||ch=='Y') return ;
return ;
}
bool isword(char ch){//检查字符ch是否为单词分隔符
if(ch==',')
return ;
return ;
}
bool issentance(char ch){//检查字符ch是否为句子分隔符
if(ch=='.'||ch=='?' ||ch==':'||ch==';'||ch=='!') return ;
return ;
}
int main(){
while(cin>>msg){//以空格为标记,截取文章片段
int wordlen=;
bool flag_frevowel=;//当当前字符为元音时,检查前一字符是否为元音的标记
int syl=;//假设当前单词长度>3时,记录音节数的变化量。若单词实际长度<=3,则syllable-syl
int i;
for(i=;msg[i];i++){
if(isalpha(msg[i])){//当前字符为 字母
wordlen++;//当前所处理的单词的已知长度 (已知长度<=实际长度)
if(wordlen<=){//当 已知长度<=3 时
if(!isalpha(msg[i+])){//检查单词实际长度是否<=3
syllable++;//当实际长度<=3时,syllable无条件+1
syllable-=syl;//实际音节数调整,单词实际长度<=3,则syllable减去 "假设单词长度>3时" 音节数的变化量syl
syl=;
continue;
}
}
if(isvowel(msg[i])){//当前字母为 元音字母
if(msg[i]=='e'){
if(!isalpha(msg[i+])&&msg[i-]=='l'){//-le
syllable++;
syl++;//由于不知道单词的实际长度,因此总音节数syllable与音节数变化量syl同时递增
continue;
}
else if(!isalpha(msg[i+])) continue;// -e
else if((msg[i+]=='d'||msg[i+]=='s')&&!isalpha(msg[i+])) continue;// -ed -es
}
/*处理连续或单个元音*/
if(!flag_frevowel){//当前字母为元音,但前一字符不是元音
flag_frevowel=;
syllable++;
syl++;
continue;
}
else continue;//当前字母为元音,但前一字母也是元音,即出现连续元音,syllable不计数
}
flag_frevowel=;//当前字母不是元音
}
else if(isword(msg[i])){//当前字符为 单词分隔符
flag_frevowel=;
wordlen=;//当前单词操作已结束,长度清零,计算下一单词
syl=;
word++;
}
else if(issentance(msg[i])){//当前字符为 句子分隔符
flag_frevowel=;
wordlen=;//当前单词操作已结束,长度清零,计算下一单词
word++;
syl=;
sentance++;
}
}
if(isalpha(msg[i-])) word++;//当前文章片段最后一个字符为 字母
}
printf("%.2lf",206.835-1.015*(double)word/(double)sentance-84.6*(double)syllable/(double)word);
return ;
}
poj3371的更多相关文章
- Flesch Reading Ease -POJ3371模拟
Flesch Reading Ease Time Limit: 1000MS Memory Limit: 65536K Description Flesch Reading Ease, a reada ...
- poj分类 很好很有层次感。
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. ( ...
- 【转】POJ题目分类推荐 (很好很有层次感)
OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期: 一. ...
- 【转】ACM训练计划
[转] POJ推荐50题以及ACM训练方案 -- : 转载自 wade_wang 最终编辑 000lzl POJ 推荐50题 第一类 动态规划(至少6题, 和 必做) 和 (可贪心) (稍难) 第二类 ...
- POJ 题目分类(转载)
Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...
- (转)POJ题目分类
初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. ...
- acm常见算法及例题
转自:http://blog.csdn.net/hengjie2009/article/details/7540135 acm常见算法及例题 初期:一.基本算法: (1)枚举. (poj17 ...
- poj分类
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. ( ...
- 转载 ACM训练计划
leetcode代码 利用堆栈:http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/http://oj.leetcode. ...
随机推荐
- 自定义SharePoint 2013 元数据选择控件
元数据在Sharepoint中是一个很常用的功能,他提供一个方法来管理企业中常用的关键词,可以更加统一的使用和更新.默认情况下,绑定在列表或库中的元数据字段可以设置是否允许为多个值.但是无法控制在弹出 ...
- ArcEngine环境下合并断开的线要素(根据属性)
1.遇到的问题: 最近遇到在线要素(矢量数据)中,一条完整的道路.河流等往往是断开的,如下图1所示: 2.思路: 在ArcGIS Desktop中没有相关的工具可以将这些断开的线要素进行自动合并,今天 ...
- SharePoint 错误集 3
1. workflow 流程走不下去,报 workflow fails to run 的错误 请确保下面二个service要么都start,要么都stop: Microsoft SharePoint ...
- C语言异常与断言接口与实现
程序中通常会出现三种错误:用户错误.运行期错误以及异常 欢迎关注我的个人博客:www.wuyudong.com, 更多精彩文章与您分享 标准库函数setjmp和longjmp 在C语言中,标准库函数s ...
- swift基础二
import Foundation // MARK: - ?和!的区别 // ?代表可选类型,实质上是枚举类型,里面有None和Some两种类型,其实nil相当于OPtional.None,如果非ni ...
- 揭开智能配置上网(微信Airkiss)的神秘面纱
本文介绍微信利用Airkiss技术对wifi设备进行智能配置上网的场景,并分析其实现的原理.这里再次说明,Airkiss只是用于配置上网,其跟微信硬件平台的通信流程和接入协议规范完全没有关系.一个wi ...
- 可折叠的ToolBar+抽屉菜单NavigationView+浮动按钮FloatButton
使用Material Design风格的ToolBar和抽屉导航 先看个简单的运行效果 主要记录下布局的写法 1 用到的Google Design依赖和V7包依赖 compile 'com.andro ...
- 【未解决】eclipse未自动引入maven依赖
删掉maven本地库,重新编译项目,刷新eclipse后,发现工程上打叉,查看build path,依赖全没有引入,不知为何,暂无解
- C++ STL 迭代器失效问题
之前看<C++ Primier>的时候,也解到在顺序型窗口里insert/erase会涉及到迭代器失效的问题,并没有深究.今天写程序的时候遇到了这个问题. 1 莫名其妙的Erase 最初我 ...
- 纪录JVM内存模型内容
声明:本内容是博主在牛客网上看到的网友发表的答案,因为感觉总结的比较好,所以摘抄过来供大家学习. 内容: 大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,He ...