洛谷p1125 笨小猴 c语言
时间: 2023-12-05 17:38:33 浏览: 62
洛谷p1125是一道C语言题目,题目描述为:给定一个字符串,统计其中每个字母出现的次数,然后找出出现次数最多和最少的字母,计算它们的出现次数之差,判断这个差值是否为质数。如果是质数,则输出“Lucky Word”和这个差值;否则,输出“No Answer”和0。而AC代码中包含了判断质数的函数和计算字母出现次数的方法。另外,引用提到了笨小猴的词汇量很小,但他找到了一种方法在英语选择题中选对的几率非常大,但并没有提到具体的方法。
相关问题
洛谷P1125——笨小猴(简易模拟)
这是一道模拟题,题目描述如下:
有 n 个猴子,按顺序编号为 1,2,3,…,n。这 n 只猴子按顺序围成一圈。从第 1 只猴子开始数,数到第 m 只猴子,把它踢出圈,剩下的猴子重新围成一圈,继续从第 1 只猴子开始数,直到只剩下一只猴子为止。问最后剩下的猴子编号是多少?
下面是解题思路:
首先,我们可以用一个数组来表示每只猴子,用一个变量表示当前轮到的猴子的编号。每次数到第 m 只猴子,就将它从数组中删除(将它对应的元素置为 0),同时更新当前轮到的猴子的编号。如果数组中只剩下一只猴子,就输出它的编号。
具体实现可以参考下面的代码(C++实现):
```
#include <iostream>
using namespace std;
const int maxn = 10000;
int a[maxn]; // 存储猴子编号的数组
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
a[i] = i + 1; // 初始化猴子编号
}
int cur = 0; // 当前轮到的猴子的编号
while (true) {
int cnt = 0; // 当前轮已经数了几只猴子
for (int i = 0; i < n; i++) {
if (a[i] != 0) { // 如果这只猴子还没被踢出圈
cnt++;
if (cnt == m) { // 数到了第 m 只猴子
a[i] = 0; // 踢出圈
cnt = 0; // 重新开始计数
}
if (a[i] != 0) {
cur = i; // 更新当前轮到的猴子的编号
}
}
}
int sum = 0; // 统计剩下的猴子数量
int last = 0; // 记录最后一只猴子的编号
for (int i = 0; i < n; i++) {
if (a[i] != 0) {
sum++;
last = a[i];
}
}
if (sum == 1) { // 只剩下一只猴子了
cout << last << endl; // 输出它的编号
break; // 结束循环
}
}
return 0;
}
```
希望能够帮助你解决这道题目!
p1125 [noip2008 提高组] 笨小猴
题目描述:
笨小猴在玩耍,它有一个长度为 n 的字符串 s。它想把这个字符串切成若干个非空的子串,使得每个子串都是回文串。它最少需要切几刀?
输入格式:
输入共一行,为一个长度为 n 的字符串 s。
输出格式:
输出共一行,为一个整数,表示最少需要切的刀数。
数据范围:
1≤n≤500
输入样例:
aab
输出样例:
1
算法1
(动态规划) $O(n^2)$
1.状态表示
dp[i]表示前i个字符最少可以分成几个回文串
2.状态转移
dp[i] = min(dp[j] + 1) (j < i && j + 1 ~ i是回文串)
时间复杂度
参考文献
python3 代码
C++ 代码
算法2
(中心扩展) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码