笨小猴
时间限制:1秒 内存限制:50M
题目描述
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
输入描述
输入只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
输出描述
输出共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”; 第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。
样例
输入
error
输出
Lucky Word
2
输入
olympic
输出
No Answer
0
这题整体还行,就是统计字母出现次数,求个max和min,差是素数就是Lucky Word,否则是No Answer
BUT!!!
这里有个魔鬼细节,那就是判素数时0和1的情况
所以判素数时要有个特判
又因为这题数据范围较小,所以直接用埃氏筛就行了。
判素数代码如下:
bool prime(int n){
if(n==1||n==0) return 0;
for(int i=2;i*i<=n;i++){
if(n%i==0) return 0;
}
return 1;
}
这样就行了
接下来就是简单的统计字母出现次数、求max和min、判素数,最后输出就行了。
所以我们好废话不多说,不多说废话,因为说废话真的很烦,也不知道大家喜不喜欢话说废话,不过我是从不说废话的,那我们上AC代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<cmath>
#include<iomanip>
#include<cstring>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
#include<set>
#include<list>
using namespace std;
int a[105],maxx,minn=0x3f3f3f;
bool prime(int n){
if(n==1||n==0) return 0;
for(int i=2;i*i<=n;i++){
if(n%i==0) return 0;
}
return 1;
}
int main(){
string s;
cin>>s;
int l=s.size();
for(int i=0;i<l;i++){
a[s[i]-'a']++;
}
for(int i=0;i<=114;i++){
if(a[i]>0){
maxx=max(maxx,a[i]);
minn=min(minn,a[i]);
}
}
if(prime(maxx-minn)){
cout<<"Lucky Word"<<endl<<maxx-minn;
}else cout<<"No Answer"<<endl<<0;
return 0;
}
好了,下篇博文见!