A:无穷力量
题目描述
2022年重庆突发山火让世界看到了中国一个又一个的感人事迹:战士们第一时间奔赴火场,志愿者们自发组成团队,为救火提供一切的可能的服务,人们自发输送物资,有的志愿者甚至几天几夜没有睡觉。每个人献出一点力,造就了集体的无穷力量。山火被灭后,记者想统计共有多少人志愿者参加了灭火行动,他在山脚共找到了N个不同的志愿者进行调查。这N个被调查的志愿者回答如下:
第1位志愿者回答:和我一起行动的,除了我之外,还有A[1]个人。
第2位志愿者回答:和我一起行动的,除了我之外,还有A[2]个人。
第3位志愿者回答:和我一起行动的,除了我之外,还有A[3]个人。
。。。。。。
第N位志愿者回答:和我一起行动的,除了我之外,还有A[N]个人。
假设这N位志愿者都没有记错,那么至少有多少志愿者参与了灭火?
输入
分两行输入。
第一行,一个整数N。
第二行,N个整数,空格分开,第i个整数表示A[i]。
输出
一个整数,表示至少有多少个志愿者。
样例输入 Copy
【样例1】 4 1 2 1 2 【样例2】 9 2 2 44 2 2 2 444 2 2
样例输出 Copy
【样例1】 5 【样例2】 499
提示
对于100%的数据,3<N<=50,0<=A[i]<=1000000。
#include <bits/stdc++.h>
using namespace std;
map<int, int>mp;
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
int num;
scanf("%d", &num);
mp[++num]++;
}
int sum = 0;
for (auto it : mp)
{
sum += it.first;
while (mp[it.first] > it.first)
{
mp[it.first] -= it.first;
sum += it.first;
}
}
if (sum >= n) printf("%d\n", sum);
else printf("%d\n", n);
return 0;
}
B:幸运位置
题目描述
刀越磨越快,脑子越用灵。不管什么事情,小宏总是喜欢多思考。今天他和小伙伴们玩一个游戏:n个人围成一圈,从第1个位置开始报数,每隔m个人报一次数,每次报数的人要表演节目,这样很有可能有人不用表演节目。例如有6个人,每隔3报数,报数的位置则是:1、5、3、1、5、3……,这样位置2、4、6的人就不用表演节目。小宏想考考你:在玩游戏前,根据n和m,迅速找出这些不用表演节目的位置。
输入
共一行,两个整数:n和m。1<=n<=10000, 1<=m<

文章讲述了在统计重庆山火灭火行动中志愿者人数时遇到的问题,以及求解不超过给定数值N的最大2的幂次方的算法。涉及到了集合论和幂运算的应用。
最低0.47元/天 解锁文章
512

被折叠的 条评论
为什么被折叠?



