【洛谷 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;
}
目录
相关文章
【2001NOIP普及组】T3. 求先序排列 试题解析
【2001NOIP普及组】T3. 求先序排列 试题解析
|
6月前
|
C++
【洛谷 P1307】[NOIP2011 普及组] 数字反转 题解(字符串)
**NOIP2011普及组题目:给定整数N,反转其位得到新数。新数首位非0(除非N=0)。输入0时直接输出0,其他情况输出反转后的数,考虑负数及前导0。提供的C++代码实现通过读入字符串,反转数字顺序并处理符号和前导0。**
33 0
|
6月前
【洛谷 P1036】[NOIP2002 普及组] 选数 题解(深度优先搜索+判断质数+枚举子集)
**NOIP2002普及组选数问题**:给定$n$个整数和一个整数$k$,需找出所有$k$个数的组合,计算它们的和为素数的种类数。输入包含$n$和$k$,以及$n$个整数;输出是符合条件的组合数。例如,对于输入`4 3`和数组`[3, 7, 12, 19]`,输出为`1`。代码使用递归枚举子集并检查质数的方法。
71 0
|
6月前
|
存储 C++
【洛谷 P1102】A-B 数对 题解(映射)
这是一个编程题目,要求计算给定正整数序列中满足 \( A - B = C \) 的数对个数。输入包含两行:正整数 \( N \) 和 \( C \),以及一串正整数。使用一个哈希映射记录每个数字出现的次数,然后遍历映射,如果找到 \( A = B + C \),则累加对应计数。样例输入输出为 \( N=4, C=1 \),数列为 \( 1 1 2 3 \),答案为 \( 3 \)。代码使用 C++ 实现,通过维护一个映射来存储数字频率并计算数对。
39 0
|
6月前
|
C++
【洛谷 P1059】[NOIP2006 普及组] 明明的随机数 题解(集合)
**NOIP2006普及组题目**,明明需生成不重复的1-1000间随机整数,输入含两行:第一行是整数N(≤100),第二行是N个随机数。输出两行,第一行是唯一数的个数M,第二行是排序后的唯一数。示例:输入10个数含重复,输出8个不同数排序后结果。解题方法:利用C++的`set`进行去重和排序。
65 0
|
6月前
|
移动开发 C++
【洛谷 P1157】组合的输出 题解(深度优先搜索+枚举子集)
该问题要求编程输出从1到n中选择r个元素的所有组合,组合按字典序排列。输入包含两自然数n和r(1&lt;n&lt;21, 0≤r≤n)。输出每个组合时,每个数字占据3个字符宽度。提供的AC代码使用C++,通过递归搜索方法枚举子集。样例输入为5 3,输出显示所有3个元素的组合。
50 0
|
6月前
|
机器学习/深度学习 存储
【洛谷 P1028】[NOIP2001 普及组] 数的计算 题解(递归)
**NOIP2001普及组数的计算**:给定自然数\( n \),构造数列,新数不超过序列最后一项一半。求合法数列个数。输入\( n \)(\(1 \leq n \leq 10^3\))。样例:输入6,输出6。递归解决,代码中定义函数`f`实现递归计算,总和存储在`cnt`中,最后输出。
55 0
|
6月前
|
存储
【洛谷 P2141】[NOIP2014 普及组] 珠心算测验 题解(集合+多重循环)
**NOIP2014普及组的珠心算测验题要求参赛者找出给定集合中多少个数可表示为其他两个不同数的和。输入含n个正整数,输出满足条件的数的个数。样例输入4个数,输出2,因1+2=3且1+3=4。代码利用集合存储和,遍历所有数对组合,当找到匹配和时插入集合,最后输出集合大小。注意数据规模为n≤100,数不超过10,000。**
129 0
|
7月前
|
Java C++ Python
试题 基础练习 查找整数
试题 基础练习 查找整数
30 0
|
7月前
蓝桥杯-基础练习 查找整数
蓝桥杯-基础练习 查找整数
58 0