PAT (Advanced Level) Practise 1071 Speech Patterns (25)
2016-03-22 21:43
471 查看
1071. Speech Patterns (25)
时间限制300 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
HOU, Qiming
People often have a preference among synonyms of the same word. For example, some may prefer "the police", while others may prefer "the cops". Analyzing such patterns can help to narrow down a speaker's identity, which is useful when validating, for example,
whether it's still the same person behind an online avatar.
Now given a paragraph of text sampled from someone's speech, can you find the person's most commonly used word?
Input Specification:
Each input file contains one test case. For each case, there is one line of text no more than 1048576 characters in length, terminated by a carriage return '\n'. The input contains at least one alphanumerical character, i.e., one character from the set [0-9
A-Z a-z].
Output Specification:
For each test case, print in one line the most commonly occurring word in the input text, followed by a space and the number of times it has occurred in the input. If there are more than one such words, print the lexicographically smallest one. The word should
be printed in all lower case. Here a "word" is defined as a continuous sequence of alphanumerical characters separated by non-alphanumerical characters or the line beginning/end.
Note that words are case insensitive.
Sample Input:
Can1: "Can a can can a can? It can!"
Sample Output:
can 5
把每个单词分别挑出来排序就好了
#include<cstdio>
#include<stack>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
const int maxn = 2e6 + 10;
string s[maxn];
char ch, bef;
int tot = 0;
bool check(char ch)
{
return ch >= '0'&&ch <= '9' || ch >= 'a'&&ch <= 'z' || ch >= 'A'&&ch <= 'Z';
}
int main()
{
bef = '\n';
while ((ch = getchar()) != '\n')
{
if (check(ch)) { if (ch >= 'A'&&ch <= 'Z') ch += 32; s[tot] += ch; }
else if (check(bef)) tot++;
bef = ch;
}
if (s[tot] != "") tot++;
sort(s, s + tot);
int ans = 1, id = 0;
for (int i = 1, k = 1; i < tot; i++)
{
if (s[i] == s[i - 1]) k++;
if (i == tot - 1 || s[i] != s[i - 1])
{
if (ans < k) ans = k, id = i - 1;
k = 1;
}
}
cout << s[id] << " " << ans << endl;
return 0;
}
相关文章推荐
- libdvbpsi源码分析(四)PAT表解析/重建
- PAT配置
- 什么是端口复用动态地址转换(PAT) 介绍配置实例
- MikroTik layer7-protocol
- PAT是如何工作的
- PAT 乙级题:1002. 写出这个数 (20)
- PAT (Advanced Level) Practise 1001-1010
- 数据结构学习与实验指导(一)
- PAT Basic Level 1001-1010解题报告
- 1001. 害死人不偿命的(3n+1)猜想
- 1002. 写出这个数
- 1032. 挖掘机技术哪家强
- 1001. 害死人不偿命的(3n+1)猜想 (PAT basic)
- 1002. 写出这个数(PAT Basic)
- 1004. 成绩排名(PAT Basic)
- 1006. 换个格式输出整数(PAT Basic)
- 1007. 素数对猜想(PAT Basic)
- 1008. 数组元素循环右移问题
- 1009. 说反话(PAT Basic)
- 1011. A+B和C(PAT Basic)