首页 > 编程语言 >gesp(C++五级)(5)洛谷:B3929:[GESP202312 五级] 小杨的幸运数

gesp(C++五级)(5)洛谷:B3929:[GESP202312 五级] 小杨的幸运数

时间:2025-01-15 13:32:02浏览次数:3  
标签:le 洛谷 GESP202312 样例 lucky 000 五级 幸运 100

gesp(C++五级)(5)洛谷:B3929:[GESP202312 五级] 小杨的幸运数

在这里插入图片描述

题目描述

小杨认为,所有大于等于 a a a 的完全平方数都是他的超级幸运数。

小杨还认为,所有超级幸运数的倍数都是他的幸运数。自然地,小杨的所有超级幸运数也都是幸运数。

对于一个非幸运数,小杨规定,可以将它一直 + 1 +1 +1,直到它变成一个幸运数。我们把这个过程叫做幸运化。例如,如果 a = 4 a=4 a=4,那么 4 4 4 是最小的幸运数,而 1 1 1 不是,但我们可以连续对 1 1 1 做 3 3 3 次 + 1 +1 +1 操作,使其变为 4 4 4,所以我们可以说, 1 1 1幸运化后的结果是 4 4 4。

现在,小杨给出 N N N 个数,请你首先判断它们是不是幸运数;接着,对于非幸运数,请你将它们幸运化。

输入格式

第一行 2 2 2 个正整数 a , N a, N a,N。

接下来 N N N 行,每行一个正整数 x x x ,表示需要判断(幸运化)的数。

输出格式

输出 N N N 行,对于每个给定的 x x x ,如果它是幸运数,请输出 lucky,否则请输出将其幸运化后的结果。

样例 #1

样例输入 #1

2 4 
1 
4 
5 
9

样例输出 #1

4 
lucky 
8 
lucky

样例 #2

样例输入 #2

16 11 
1 
2 
4 
8 
16 
32 
64 
128 
256 
512
1024

样例输出 #2

16 
16 
16 
16 
lucky 
lucky 
lucky 
lucky 
lucky 
lucky 
lucky

提示

样例解释 1

虽然是完全平方数,但它小于 a a a,因此它并不是超级幸运数,也不是幸运数。将其进行 3 3 3 次 + 1 +1 +1 操作后,最终得到幸运数 4 4 4。4是幸运数,因此直接输出 lucky

5 5 5 不是幸运数,将其进行 3 3 3 次 + 1 +1 +1 操作后,最终得到幸运数 8 8 8。

9 9 9 是幸运数,因此直接输出 lucky

数据规模

对于 30 % 30\% 30% 的测试点,保证 a , x ≤ 100 , N ≤ 100 a,x \le 100,N \le 100 a,x≤100,N≤100。

对于 60 % 60\% 60% 的测试点,保证 a , x ≤ 1 0 6 a,x \le 10^6 a,x≤106。

对于所有测试点,保证 a ≤ 1 , 000 , 000 a \le 1,000,000 a≤1,000,000;保证 N ≤ 2 × 1 0 5 N \le 2 \times 10^5 N≤2×105;保证 1 ≤ x ≤ 1 , 000 , 001 1 \le x \le 1,000,001 1≤x≤1,000,001。

AC代码(100分)

#include<bits/stdc++.h>
using namespace std;
/*思路:
  1、将符合条件的超级幸运数和幸运数枚举并存起来
   	 根据题意枚举的范围最小为a,最大为1002001
		(备注:1000的平方是1000000,1001的平方是1002001) 
  2、然后按题意判断即可 
*/ 
int a,n,x; 

int main(){ 
	cin>>a>>n;
	//找符合条件的超级幸运数和幸运数并存起来 
	vector<int> v;//动态数组 
	for(int i=a;i<=1002001;i++){
		int m=sqrt(i);
		if(m*m==i){//如果i是完全平方数 
			for(int j=i;j<=1002001;j+=i){
				v.push_back(j);//将符合要求的幸运数加入动态数组 
			}
		}
	} 
	//动态数组排序
	sort(v.begin(),v.end()); 
	while(n--){
		cin>>x;
		bool f=0;//标记是否找到 
		for(int i=0;i<v.size();i++){//遍历查找vector中是否有x 
			if(v[i]==x){
				f=1;
				cout<<"lucky"<<endl;
				break;
			}
		} 
		if(f==0){//如果没有找到 
			for(int i=0;i<v.size();i++){
				if(v[i]>x){
					cout<<v[i]<<endl;
					break;
				}
			}
		}
	}
	return 0;
} 

文末彩蛋:

点击王老师青少年编程主页有更多精彩内容

标签:le,洛谷,GESP202312,样例,lucky,000,五级,幸运,100
From: https://blog.csdn.net/weixin_66461496/article/details/145155039

相关文章

  • gesp(C++五级)(6)洛谷:B3930:[GESP202312 五级] 烹饪问题
    gesp(C++五级)(6)洛谷:B3930:[GESP202312五级]烹饪问题题目描述有NNN种食材,编号从00......
  • 2021 年 3 月青少年软编等考 C 语言五级真题解析
    目录T1.红与黑思路分析T2.密室逃脱思路分析T3.求逆序对数思路分析T4.最小新整数思路分析T1.红与黑有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计......
  • 洛谷B3733 [信息与未来 2017] 基因组分析密码锁题解
    [信息与未来2017]密码锁题目描述乌龟给自己的贵重物品上了密码锁。密码锁上有5 个数字拨盘。每个数字拨盘每次向上拨使数字增加1 (9 向上拨得到0),向下拨使数字减少1 (0 向下拨得到9)。拨盘上的数字组成一个5 位数。只要拨盘上的数字变为素数,密码锁就会被解开。素......
  • 洛谷 P1102 A-B 数对(二分写法)
    题目:P1102A-B数对-洛谷|计算机科学教育新生态题目背景出题是一件痛苦的事情!相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的A+BProblem,改用A-B了哈哈!题目描述给出一串正整数数列以及一个正整数 C,要求计算出所有满足 A−B=C 的数对的个数(不同位置的数......
  • 洛谷P2181 对角线
    对于一个 ......
  • 洛谷题单指南-线段树的进阶用法-P3157 [CQOI2011] 动态逆序对
    原题链接:https://www.luogu.com.cn/problem/P3157题意解读:长度为n的序列,序列是1~n的排列,一共m个删除操作,每一个删除之前输出逆序对。解题思路:要计算静态的逆序对,可以通过树状数组、权值线段树等方式,时间复杂度都是O(nlogn)要计算动态的逆序对,算上每一次删除,暴力做法需要O(mnlo......
  • 洛谷 P3615 如厕计划
    题意:2n个人排队上厕所,有两个厕所,一个男女都可以上,一个只有女的可以上,每个人上厕所都只有一分钟,你可以调整这些人的顺序,每个的怒气值为有多少后面的人排到自己前面了。求可以n分钟上完厕所的情况中,怒气最大的最小。这题看半天没思路,只能看题解。首先厕所一分钟都不能停,要么男女一......
  • 洛谷 P1928 外星密码
    好久不见,随便找一题找找感觉。递归写法:#include<bits/stdc++.h>usingnamespacestd;strings;stringtimes(stringx,intcnt){ stringnewstr=""; while(cnt--)newstr+=x; returnnewstr;}pair<string,int>decompress(intpos){ intnum=0; stringte......
  • 洛谷 P2754 [CTSC1999] 家园 / 星际转移问题——题解
    #ifdefONLINE_JUDGE#else#defineQiu_Cheng#endif#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;//typedeflonglongll;constintN=2e6+5,mod=1e9+7,inf=INT_MAX;//constintmod1=469762049,mod2=998244353,mod3=1004535......
  • 洛谷 P1550 [USACO08OCT] Watering Hole G 题解
     由于无法提交题解所以来csdn蹭个位置  题目链接  这道题我的思路就是用并查集(推荐先学习:并查集(B站视频))将所有农场连接成n个(几个都不重要)连通块,用一个优先队列(由于作者没找视频所以不放链接了sorry)记录x农场连接y农场的最小价格。  有个值......