统计出现字符频率,判断最大最小频次之差是否为质数。
OJ: noi_openjudge
题目 ID: ch0109-06
难度:入门
标签:字符串计数质数python
日期: 2026-07-30 23:01
题意
若单词字符最高频与最低频的差是质数,输出 Lucky Word 和该差。
思路
Counter 统计频率,取值集合的最大最小值相减。质数需至少为
代码
cpp
/*-----------------
* author: Rainboy
* email: rainboylvx@qq.com
* time: 2019年 05月 07日 星期二 14:42:03 CST
* problem: luogu-1125
*----------------*/
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
char word[200];
int cnt[255] = {0};
bool isprime(int n){
int i;
if( n <2)
return false;
for(i=2;i<=sqrt(n);i++)
if( n % i ==0)
return false;
return true;
}
int main(){
scanf("%s",word);
int _min = 0x7f7f7f7f,_max = 1;
int len = strlen(word);
int i;
for (i=0;i<len;i++){
cnt[ word[i] ]++;
}
for(i='a';i<='z';i++)
{
if( cnt[i] !=0)
_min = min( cnt[i],_min);
_max = max(_max,cnt[i]);
}
int a = _max - _min;
if( isprime(a)){
printf("Lucky Word\n");
printf("%d\n",_max-_min);
}
else {
printf("No Answer\n");
printf("0");
}
return 0;
}复杂度
总结
Python代码
python
from collections import Counter
word = input().strip()
frequencies = Counter(word).values()
difference = max(frequencies) - min(frequencies)
is_prime = difference >= 2 and all(difference % divisor for divisor in range(2, int(difference**0.5) + 1))
print("Lucky Word" if is_prime else "No Answer")
print(difference if is_prime else 0)C++代码
cpp
/*-----------------
* author: Rainboy
* email: rainboylvx@qq.com
* time: 2019年 05月 07日 星期二 14:42:03 CST
* problem: luogu-1125
*----------------*/
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
char word[200];
int cnt[255] = {0};
bool isprime(int n){
int i;
if( n <2)
return false;
for(i=2;i<=sqrt(n);i++)
if( n % i ==0)
return false;
return true;
}
int main(){
scanf("%s",word);
int _min = 0x7f7f7f7f,_max = 1;
int len = strlen(word);
int i;
for (i=0;i<len;i++){
cnt[ word[i] ]++;
}
for(i='a';i<='z';i++)
{
if( cnt[i] !=0)
_min = min( cnt[i],_min);
_max = max(_max,cnt[i]);
}
int a = _max - _min;
if( isprime(a)){
printf("Lucky Word\n");
printf("%d\n",_max-_min);
}
else {
printf("No Answer\n");
printf("0");
}
return 0;
}复杂度
时间复杂度为
总结
频次差为