【洛谷 P1125】[NOIP2008 提高组] 笨小猴 题解(字符串+映射+集合)

简介: **摘要:**在NOIP2008提高组的“笨小猴”问题中,需检查单词中出现次数最多和最少的字母频率差是否为质数。若差值为质数,输出"Lucky Word"及该差值;否则,输出"No Answer"和0。给定AC代码使用C++,通过映射统计字符频率,集合找出最大和最小值,并通过函数判断差值是否为质数。

[NOIP2008 提高组] 笨小猴

题目描述

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

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

输入格式

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

输出格式

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

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

样例 #1

样例输入 #1

error

样例输出 #1

Lucky Word
2

样例 #2

样例输入 #2

olympic

样例输出 #2

No Answer
0

提示

【输入输出样例 1 解释】

单词 error 中出现最多的字母 $\texttt r$ 出现了 $3$ 次,出现次数最少的字母出现了 $1$ 次,$3-1=2$,$2$ 是质数。

【输入输出样例 2 解释】

单词 olympic 中出现最多的字母 $\texttt i$ 出现了 $1$ 次,出现次数最少的字母出现了 $1$ 次,$1-1=0$,$0$ 不是质数。

(本处原题面错误已经修正)

noip2008 提高第一题

思路

用映射统计字符频数,用集合获得最大频数和最小频数。

AC代码

#include <iostream>
#include <map>
#include <set>
#include <cmath>
#include <sstream>
#define AUTHOR "HEX9CF"
using namespace std;

bool pn(int x){
   
    if(x <= 1){
   
        return 0;
    }
    for (int i = 3; i < sqrt(x); i++)
    {
   
        if (!(x % i))
        {
   
            return 0;
        }
    }
    return 1;
}

int main() {
   
    string str;
    stringstream ss;
    char ch;
    map<char, int> m;
    set<int> s;
    cin >> str;
    ss << str;
    while(ss >> ch){
   
        m[ch]++;
    }
    for(map<char,int>::iterator it = m.begin(); it != m.end();it++){
   
        s.insert(it->second);
    }
    int t = *s.rbegin() - *s.begin();
    // cout << t << endl;
    if(pn(t)){
   
        cout << "Lucky Word" << endl << t << endl;
    }else{
   
        cout << "No Answer" << endl << 0 << endl;
    }
    return 0;
}
目录
相关文章
|
API
代码随想录 Day5 哈希表1 T242 相同字母的异序词 T349两个数组的交集 T202 快乐数 T1 两数之和(下)
代码随想录 Day5 哈希表1 T242 相同字母的异序词 T349两个数组的交集 T202 快乐数 T1 两数之和(下)
41 0
|
6月前
【洛谷 P1036】[NOIP2002 普及组] 选数 题解(深度优先搜索+判断质数+枚举子集)
**NOIP2002普及组选数问题**:给定$n$个整数和一个整数$k$,需找出所有$k$个数的组合,计算它们的和为素数的种类数。输入包含$n$和$k$,以及$n$个整数;输出是符合条件的组合数。例如,对于输入`4 3`和数组`[3, 7, 12, 19]`,输出为`1`。代码使用递归枚举子集并检查质数的方法。
98 0
|
6月前
|
C++
【洛谷 P1059】[NOIP2006 普及组] 明明的随机数 题解(集合)
**NOIP2006普及组题目**,明明需生成不重复的1-1000间随机整数,输入含两行:第一行是整数N(≤100),第二行是N个随机数。输出两行,第一行是唯一数的个数M,第二行是排序后的唯一数。示例:输入10个数含重复,输出8个不同数排序后结果。解题方法:利用C++的`set`进行去重和排序。
71 0
|
6月前
|
机器学习/深度学习 存储
【洛谷 P1028】[NOIP2001 普及组] 数的计算 题解(递归)
**NOIP2001普及组数的计算**:给定自然数\( n \),构造数列,新数不超过序列最后一项一半。求合法数列个数。输入\( n \)(\(1 \leq n \leq 10^3\))。样例:输入6,输出6。递归解决,代码中定义函数`f`实现递归计算,总和存储在`cnt`中,最后输出。
59 0
|
6月前
|
存储 C++
【洛谷 P1102】A-B 数对 题解(映射)
这是一个编程题目,要求计算给定正整数序列中满足 \( A - B = C \) 的数对个数。输入包含两行:正整数 \( N \) 和 \( C \),以及一串正整数。使用一个哈希映射记录每个数字出现的次数,然后遍历映射,如果找到 \( A = B + C \),则累加对应计数。样例输入输出为 \( N=4, C=1 \),数列为 \( 1 1 2 3 \),答案为 \( 3 \)。代码使用 C++ 实现,通过维护一个映射来存储数字频率并计算数对。
50 0
|
算法 Java
2015 蓝桥杯省赛部分题整理(九数组分数,牌型种数,串逐位和,循环节长度,打印菱形)
2015 蓝桥杯省赛部分题整理(九数组分数,牌型种数,串逐位和,循环节长度,打印菱形)
96 0
|
7月前
|
Java C++ Python
试题 基础练习 查找整数
试题 基础练习 查找整数
36 0
|
7月前
子串分值和(蓝桥杯C组)
子串分值和(蓝桥杯C组)
47 0
|
7月前
蓝桥杯-基础练习 查找整数
蓝桥杯-基础练习 查找整数
61 0
|
7月前
蓝桥杯 1的个数
蓝桥杯 1的个数
38 0