P1125 [NOIP2008 提高组] 笨小猴(质数判断和快速排序找字符串最大值,最小值)

简介: P1125 [NOIP2008 提高组] 笨小猴(质数判断和快速排序找字符串最大值,最小值)

题目描述



笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!


这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。


输入格式



一个单词,其中只可能出现小写字母,并且长度小于100 。


输出格式



共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;


第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出 0。


输入输出样例



输入

error


输出  

1. Lucky Word
2. 2


输入  

olympic


输出  

1. No Answer
2. 0


题目分析,我们可以先把每一位输入的字符拍好序然后统计个数,之后就排序,取最大值,最小值,最后搞一个判断是否是质数的bool函数,具体操作看代码。


顺便提一下,这个素数为什么要用sqrt(x);可以减少时间复杂度


因为如果它不是质数,那么它一定可以表示成两个数(除了1和它本身)相乘,这两个数必然有一个小于等于它的平方根。只要找到小于或等于的那个就行了


#include<bits/stdc++.h>
const int  maxn=1e6+7;
using namespace std;
string s;
int sum1,sum2,a[maxn],sum[maxn],cnt; 
bool zx(int x)
{
  if(x==0||x==1) return false;
  for(int i=2;i<=sqrt(x);i++)
  {
    if(x%i==0) return false;
  }
   return true;
}
int main()
{
  cin>>s;
  for(int i=0;i<=s.size()-1;i++)
  {
    a[i]=s[i]-48;
  }
  sort(a,a+s.size());
  for(int i=0;i<s.size();i++)
  {
    if(a[i+1]==a[i]) sum[cnt]++;
     else  cnt++;
  }
  sort(sum,sum+cnt);
  if(zx(sum[cnt-1]-sum[0]))
  {
    cout<<"Lucky Word"<<endl;
    cout<<sum[cnt-1]-sum[0];
  }
  else 
  {
    cout<<"No Answer"<<endl;
    cout<<0<<endl;
    return 0;
  }
}


相关文章
|
8天前
【每日一题Day289】LC1749任意子数组和的绝对值的最大值 | dp
【每日一题Day289】LC1749任意子数组和的绝对值的最大值 | dp
25 0
|
8天前
|
存储 算法 索引
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数
|
8天前
|
算法 测试技术 C#
【最大公约数 调和级数】2183.统计可以被 K 整除的下标对数目
【最大公约数 调和级数】2183.统计可以被 K 整除的下标对数目
|
8天前
|
算法 测试技术 C#
【最大公约数 排序】2344. 使数组可以被整除的最少删除次数
【最大公约数 排序】2344. 使数组可以被整除的最少删除次数
|
8天前
|
机器学习/深度学习 存储 算法
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
40 0
|
5月前
|
算法 测试技术 C#
C++二分算法的应用:乘法表中第k小的数
C++二分算法的应用:乘法表中第k小的数
|
7月前
|
程序员
【牛客网】HJ99 自守数、OR86 返回小于 N 的质数个数
目录 HJ99 自守数 OR86 返回小于 N 的质数个数
58 0
使用二分法解决旋转数组的最小数字的问题
使用二分法解决旋转数组的最小数字的问题
69 0
使用二分法解决旋转数组的最小数字的问题

热门文章

最新文章