P15435 [蓝桥杯 2025 国 Python B] 免费披萨

传送门

这是一篇 C++ 题解。

题目描述

蓝桥小镇披萨店的老板刚刚烤制了他人生中的第 n n n 个披萨!为了庆祝这一重要时刻,他推出了一项名为“幸运订单”的活动,顾客有机会赢取免费披萨。以下是活动的具体规则:

  1. 生成订单编号:每位顾客需要生成一个九位数的订单编号。生成方法如下:首先,将数字 1 1 1 到 8 8 8 进行任意排列(每个数字正好出现一次),组成一个八位数。然后,在这个八位数的任意位置(可以是开头、结尾或中间)插入一个 1 1 1 到 8 8 8 的数字,从而得到一个九位数的订单编号。
  2. 计算最大公约数,赢取免费披萨:披萨店老板会计算每位顾客生成的订单编号与 n n n 的最大公约数(GCD)。如果某个订单编号与 n n n 的最大公约数最大,那么该顾客就有机会赢得免费披萨。注意:订单编号必须严格满足上述生成规则,如果有多个订单编号与 n n n 的最大公约数相同且达到最大值,则只有生成数值最小的订单编号的顾客能够获奖。

现在,小蓝也想参加这个活动,并希望赢取免费披萨。请你帮助小蓝找出能够让他赢得免费披萨的订单编号。

输入格式

输入一行包含一个八位的正整数 n n n,表示披萨店老板烤制的第 n n n 个披萨。

输出格式

输出一行包含一个九位的正整数表示答案,即小蓝能够赢得免费披萨的最小订单编号。

输入输出样例 #1

输入 #1

12345678 

输出 #1

415637826 

说明/提示

评测用例规模与约定

对于所有评测用例, 10 7 ≤ n < 10 8 10^7 \le n < 10^8 107≤n<108。

题意

首先按以下规则生成一个九位数的订单编号:

  • 首先,将数字 1 1 1 到 8 8 8 进行任意排列(每个数字正好出现一次),组成一个。
  • 然后,在这个八位数的任意位置(可以是开头、结尾或中间)插入一个 1 1 1 到 8 8 8 的数字,从而得到一个九位数的。

接着,我们需要找到一个这样的九位数,要求与 n n n 的最大公约数最大且这个数尽量小。

思路

时间限制为两秒,所以考虑暴力搜索。

首先使用 DFS 生成全排列,包含所有按规则组成的八位数。

接着枚举插入的位置与数字,得到所有合法订单编号。

最后考虑是否为与 n n n 的最大公约数最大且最小的数即可。

代码

#include<bits/stdc++.h>usingnamespace std;longlong n,max_gcd=-1,minn=INT_MAX;int a[10],tot;voiddfs(int pos){if(pos==8)//当生成一个八位数时,开始枚举插入的位置与数字{ string s="";for(int i=1;i<=8;i++)//使用字符串来操作 s+=char(a[i]+'0');for(int ins=0;ins<=8;ins++)for(int num=1;num<=8;num++){ string nine=s.substr(0,ins)+char(num+'0')+s.substr(ins);longlong val=stoll(nine);longlong now_gcd=__gcd(val,n);if(now_gcd>max_gcd){ max_gcd=now_gcd; minn=val;}elseif(now_gcd==max_gcd)if(val<minn) minn=val;//更新}return;}for(int i=1;i<=8;i++)//若不为八位数,继续添加数位{bool flag=0;for(int j=1;j<=pos;j++)if(a[j]==i){ flag=1;break;}if(!flag){ a[pos+1]=i;dfs(pos+1);}}}intmain(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); string s; cin>>s; n=stoll(s);dfs(0);//开始搜索 cout<<minn;//输出所需结果return0;//完结撒花}

Read more

【算法通关指南:算法基础篇】二分算法:1.在排序树组中查找元素的第一个和最后一个位置 2.牛可乐和魔法封印

【算法通关指南:算法基础篇】二分算法:1.在排序树组中查找元素的第一个和最后一个位置 2.牛可乐和魔法封印

🔥小龙报:个人主页 🎬作者简介:C++研发,嵌入式,机器人方向学习者 ❄️个人专栏:《算法通关指南》 ✨ 永远相信美好的事情即将发生 文章目录 * 前言 * 一、二分算法 * 二、在排序树组中查找元素的第一个和最后一个位置 * 2.1题目 * 2.2 算法原理 * 2.3代码 * 三、牛可乐和魔法封印 * 3.1题目 * 3.2 算法原理 * 3.3代码 * 总结与每日励志 前言 本专栏聚焦算法题实战,系统讲解算法模块:以《c++编程》,《数据结构和算法》《基础算法》《算法实战》 等几个板块以题带点,讲解思路与代码实现,帮助大家快速提升代码能力ps:本章节题目分两部分,比较基础笔者只附上代码供大家参考,其他的笔者会附上自己的思考和讲解,希望和大家一起努力见证自己的算法成长 一、

By Ne0inhk
数据结构【栈和队列附顺序表应用算法】

数据结构【栈和队列附顺序表应用算法】

栈和队列和顺序表应用算法练习 * 1.栈 * 1.1概念与结构 * 1.2栈的实现 * 2.队列 * 2.1概念与结构 * 2.2队列的实现 * 3.附(顺序表应用算法) * 3.1移除元素 * 3.2删除有序数组中的重复项 * 3.3合并两个有序数组 1.栈 1.1概念与结构 栈:⼀种特殊的线性表,其只允许在固定的⼀端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另⼀端称为栈底。栈中的数据元素遵守后进先出的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈,出数据也在栈顶。 1.2栈的实现 typedefint STDataType;typedefstructStack{ STDataType * a;int

By Ne0inhk
【笔试】算法的暴力美学——牛客 NC221681:dd爱框框

【笔试】算法的暴力美学——牛客 NC221681:dd爱框框

一、题目描述 二、算法原理 思路:滑动窗口 1)定义两个指针,一开始都为0,cur 从左开始遍历,定义一个 sum 来表示 prev 到 cur 的之间的值的总和,当 sum >= x 时,我们要根据题目条件来保存 prev 和 cur 的值; 2)当 sum >= x 时,我们记录完 prev 和 cur 的值的之后,sum -= arr[ prev ],prev++ ,往后走,只要满足条件 sum >= x 我们就要记录

By Ne0inhk
python基于大数据的手机商品数据分析

python基于大数据的手机商品数据分析

目录 * 手机商品数据分析的摘要 * 开发技术路线 * 相关技术介绍 * 核心代码参考示例 * 结论 * 源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 手机商品数据分析的摘要 随着智能手机市场的快速发展,海量数据为产品优化和商业决策提供了重要依据。Python凭借其强大的数据处理和可视化能力,成为手机商品数据分析的核心工具。 数据采集阶段,可通过爬虫技术(如Scrapy、BeautifulSoup)从电商平台(京东、淘宝)获取手机销售数据,包括价格、销量、用户评价等。结构化数据存储于MySQL或MongoDB,非结构化数据(如评论文本)通过NLTK或jieba进行分词和情感分析。 数据清洗环节使用Pandas处理缺失值和异常值,例如剔除价格异常记录或填充平均评分。特征工程中,提取关键指标如品牌市场份额、价格分布、用户满意度,并利用Matplotlib或Seaborn生成可视化图表(如热力图展示品牌-价格相关性)。 机器学习模型(如随机森林、XGBoost)可预测销量趋势或用户购买意愿,特征重要性分析揭示影响销量的核心因素(如CP

By Ne0inhk