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;
  }
}


相关文章
|
6月前
|
存储 算法 索引
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数
|
6月前
|
算法 测试技术 C#
【最大公约数 排序】2344. 使数组可以被整除的最少删除次数
【最大公约数 排序】2344. 使数组可以被整除的最少删除次数
|
6月前
|
算法 测试技术 C#
【最大公约数 调和级数】2183.统计可以被 K 整除的下标对数目
【最大公约数 调和级数】2183.统计可以被 K 整除的下标对数目
|
6月前
|
机器学习/深度学习 存储 算法
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
88 0
|
程序员
【牛客网】HJ99 自守数、OR86 返回小于 N 的质数个数
目录 HJ99 自守数 OR86 返回小于 N 的质数个数
83 0
旋转数组的最小数字
旋转数组的最小数字
47 0
|
存储 算法
【题型总结】找到第n个自定义数 | 丑数系列 + 神奇数字
思路:对于对于任意一个丑数 x,其与任意的质因数(2、3、5)相乘,结果(2x、3x、5x)仍为丑数。因此可以使用优先队列(小根堆)存放丑数x,每次从队列取出最小值x,并将x所对应的2x、3x和5x入队。第n次出队的值即为第n个丑数
257 0
【题型总结】找到第n个自定义数 | 丑数系列 + 神奇数字
LeetCode 1877. 数组中最大数对和的最小值
一个数对 (a,b) 的 数对和 等于 a + b 。最大数对和 是一个数对数组中最大的 数对和 。
114 0
11.旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
88 0
11.旋转数组的最小数字
使用二分法解决旋转数组的最小数字的问题
使用二分法解决旋转数组的最小数字的问题
92 0
使用二分法解决旋转数组的最小数字的问题