2441: 【普及-】【P1125】笨小猴
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:77
解决:21
题目描述
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设 是单词中出现次数最多的字母的出现次数, 是单词中出现次数最少的字母的出现次数,如果 是一个质数,那么笨小猴就认为这是个 Lucky Word,这样的单词很可能就是正确的答案。
输入
一个单词,其中只可能出现小写字母,并且长度小于 。
输出
共两行,第一行是一个字符串,假设输入的的单词是 Lucky Word,那么输出 Lucky Word,否则输出 No Answer;
第二行是一个整数,如果输入单词是 Lucky Word,输出 的值,否则输出 。
样例输入 复制
error
样例输出 复制
Lucky Word
2
提示
【输入输出样例 1 解释】
单词 error 中出现最多的字母 出现了 次,出现次数最少的字母出现了 次,, 是质数。
【输入输出样例 2 解释】
单词 olympic 中出现最多的字母 出现了 次,出现次数最少的字母出现了 次,, 不是质数。
(本处原题面错误已经修正)
noip2008 提高第一题
#include<bits/stdc++.h>
using namespace std;
int main(){
char a[110];
int ans[26]={0}; //ans[0]到ans[25]分别代表'a'到'z'出现的次数,注意要初始化
int l,mmax,mmin,delta; //字符长度,出现次数最多的字母出现次数和出现次数最少的字母出现次数,以及差值
scanf("%s",a);
l=strlen(a);
for (int i=0;i<l;i++)
ans[a[i]-'a']++; //统计增加某个字母的数量
mmax=0;mmin=10000; //最大最小值初始化
for (int i=0;i<26;i++) { //寻找每个字母的最大值和最小值
if (ans[i]>mmax) //如果超过最大值
mmax=ans[i];
if (ans[i]!=0&&ans[i]<mmin) //如果小于最小值,但是不能为0
mmin=ans[i];
}
delta=mmax-mmin;
if (delta==0||delta==1) { //质数特判
printf("No Answer\n0\n");
return 0;
}
for (int h=2;h*h<=delta;h++) //枚举因数
if (delta%h==0) {
printf("No Answer\n0\n"); //直接输出答案并退出程序
return 0;
}
printf("Lucky Word\n%d\n",mmax-mmin);
return 0;
}