codeM美团编程大赛初赛B轮E题
题目描述
给出一个正整数n,我们把1..n在k进制下的表示连起来记为s(n,k),例如s(16,16)=123456789ABCDEF10, s(5,2)=11011100101。现在对于给定的n和字符串t,我们想知道是否存在一个k(2 ≤ k ≤ 16),使得t是s(n,k)的子串。
输入描述:
第一行一个整数n(1 ≤ n ≤ 50,000)。
第二行一个字符串t(长度 ≤ 1,000,000)
输出描述:
"yes"表示存在满足条件的k,否则输出"no"
输入例子:
8
01112
输出例子:
yes
这里我之前就写了一套可以将任意进制转换为2~62进制的代码,可以直接套用(注意仅针对非负数)。
要注意判断为yes时及时退出,避免无谓的后续计算,这里的思想总体来说属于暴力法,好像也只有这样了(摊手),不过还是要夸夸C++的stl库,效率不错。
有其他好方法记得留言交流哦!感谢!
该题还可以进一步优化,先找出t中的最大值,然后从该进制往上数,数到16时结束。
代码如下:
1 #include <iostream> 2 #include <string> 3 #include <cmath> 4 #include <algorithm> 5 6 using namespace std; 7 8 //将任意字符转换为十进制 9 long long convertToDec(char c) 10 { 11 long long decNum; 12 if(c>='a' && c<='z') 13 decNum=c-87; 14 else if(c>='A' && c<='Z') 15 decNum=c-29; 16 else if(c>='0' && c<='9') 17 decNum=c-48; 18 19 return decNum; 20 } 21 22 //将十进制转换为这些字符[0-9a-zA-Z],61个字符,最大表示62进制 23 char convertFromDec(long long c) 24 { 25 long long objchar; 26 if(c>=10 && c<=35) 27 objchar=c+87; 28 else if(c>=36 && c<=61) 29 objchar=c+29; 30 else if(c>=0 && c<=9) 31 objchar=c+48; 32 33 return objchar; 34 } 35 36 //从原进制转换为2~62的任意进制(src:源进制,obj:目标进制,num:源进制下的数) 37 string convert(int src,int obj,int num) 38 { 39 40 string num_str=to_string(num); 41 42 long long decNum=0;//十进制数(中间数) 43 for(long long i=0;i<num_str.size();++i) 44 decNum+=convertToDec(num_str[i])*pow(src,num_str.size()-1-i); 45 46 string strTmp; 47 long long tmp; 48 while(decNum>0) 49 { 50 tmp=decNum % obj; 51 strTmp=convertFromDec(tmp)+strTmp; 52 decNum/=obj; 53 } 54 return strTmp; 55 } 56 57 58 int main() 59 { 60 int n; 61 string t; 62 while(cin>>n>>t) 63 { 64 transform(t.begin(),t.end(),t.begin(),::tolower);//将t转换为小写了(因为本次题目用大写表示16进制的数,而我们的程序中是用小写表示16进制的) 65 bool Isyes=false; 66 //保存转换后的字符串,2~16进制共15种 67 vector<string> str_converted2To16(15); 68 //该题还可以进一步优化,先找出t中的最大值,然后从该进制往上数,数到16时结束(而不是从2往上数)。 69 for(int k=2;k<=16;++k) 70 { 71 //对1~n的每个数字进行转换 72 for(int i=1;i<=n;++i) 73 { 74 str_converted2To16[k-2]+=convert(10,k,i); 75 } 76 if(str_converted2To16[k-2].find(t)!=string::npos) 77 { 78 Isyes=true; 79 cout<<"yes"<<endl; 80 break; 81 } 82 } 83 if(!Isyes) 84 cout<<"no"<<endl; 85 } 86 return 0; 87 }
补充:
大小写转换函数请用全局命名空间中的函数,这也是lower前面要加::全局作用符的原因。因为有多个不同的版本。
详情可参见https://stackoverflow.com/questions/5539249/why-cant-transforms-begin-s-end-s-begin-tolower-be-complied-successfu
转载于:https://www.cnblogs.com/xiaoxi666/p/7077273.html
codeM美团编程大赛初赛B轮E题相关推荐
- CodeM美团点评编程大赛初赛A轮 B.合并回文子串【区间Dp】
[编程题] 合并回文子串 时间限制:2秒 空间限制:262144K 输入两个字符串A和B,合并成一个串C,属于A和B的字符在C中顺序保持不变.如"abc"和"xyz&qu ...
- 牛客网-2018 美团 CodeM 编程大赛-初赛 A 轮
ACM模版 这场比赛没有晋级,以为没有好好打--我又在找借口.下午去办入职体检,比赛开始时还在回来路上,回到宿舍的时候就剩下半个小时了,签了一下到就没时间了.赛后发现第三题很有意思,就补了补-- 1- ...
- CodeM美团点评编程大赛 初赛B轮 A 黑白树 贪心 E 子串 暴力
A题类似想到给多个区间,求最少多少个区间可以覆盖全部的问题,求法就是从当前这步能够到达的区间里,选一个下一步能到的最大值,对于本题,区别一是树形结构,不是一维的直线了,区别二是点都是连续的,不是离散的 ...
- 超级码力在线编程大赛初赛 第2场 1.三角魔法
超级码力在线编程大赛初赛 第2场 1.三角魔法 题目链接 描述 小栖必须在一个三角形中才能施展魔法,现在他知道自己的坐标和三个点的坐标,他想知道他能否施展魔法 −1e9≤xi,yi≤1e9-1e9\l ...
- 超级码力在线编程大赛初赛第1场-1-树木规划题解
目录 题目描述 示例 输入 输出 说明 分析 代码 动规 贪心 其他题目 题目描述 在一条直的马路上,有n棵树,每棵树有一个坐标,代表它们距离马路起点的距离. 如果每相邻的两棵树之间的间隔不小于d,那 ...
- 超级码力在线编程大赛初赛 第3场 1.最大公倍数
超级码力在线编程大赛初赛 第3场 1.最大公倍数 题目链接 描述 小栖有一个区间,他准备从中取三个数,他想知道如何取才能使得它们的最小公倍数最大 请直接告诉小栖最小公倍数是多少. 示例 输入: a = ...
- 超级码力在线编程大赛初赛 第2场 题解
超级码力在线编程大赛初赛 第2场 题解 题目出的对退役老年选手很友好,拿个T恤跑路- 下面的题解仅代表个人观点,出了问题,概不负责. 比赛链接:https://tianchi.aliyun.com/o ...
- 2021年CSP-J入门级初赛(第一轮)真题讲解
2017年NOIP普及组初赛真题讲解 2017年NOIP普及组初赛真题讲解_哔哩哔哩_bilibili 2018年NOIP普及组初赛真题讲解 2018年NOIP普及组初赛真题讲解_哔哩哔哩_bilib ...
- 2014第六届华为创新杯编程大赛初赛解题报告
还是忍不住想吐槽华为,吐槽华为举办的这个比赛. 第一场是一星比赛,水题.不过比赛为什么在考试系统上?华为不愧是世界500强企业,招聘考试能走到机试的人数应该在百人左右吧.第一次举办如此大规模 的比赛还 ...
- 美团编程大赛-优惠券 (set)
题目描述 美团点评上有很多餐馆优惠券,用户可以在美团点评App上购买.每种优惠券有一个唯一的正整数编号.每个人可以拥有多张优惠券,但每种优惠券只能同时拥有至多一张.每种优惠券可以在使用之后继续购买. ...
最新文章
- 关于MNIST数据集的处理
- 网络爬虫-python-爬取天涯求职贴
- corda_Corda服务的异步流调用
- 十六、PHP框架Laravel学习笔记——构造器的增删改
- qt通过代码创建滚动区域,添加滚动区域到窗口
- Spring mvc @ModelAttribute
- c语言第二章网上作业答案,c语言第二章课后习题答案
- wordpress用途_8个热门WordPress多用途主题及其炫酷功能
- java解析json字符串数据
- Vue中的自定义指令
- 微信戴圣诞帽的一个简易实现程序
- linux程序设计学习心得,几点学习Linux编程的建议
- Windows 10系统下Outlook日历怎么显示农历?
- 汉诺塔(hanio)
- iPhoneSE4完虐国产手机,国产旗舰手机还有啥遮羞布?
- 【ML特征工程】第 7 章 :通过K-Means 模型堆叠进行非线性特征化
- 每天坚持“踮脚尖”,时间久了,身体会收获什么?每天踮多久?
- keycloak 验证 token
- Speedoffice(PPT)怎么自定义设置幻灯片大小
- 方舟编译器的下载与安装配置及小组分工
热门文章
- linux下获取程序所在目录绝对路径
- 用OpenGL进行立方体表面纹理贴图
- 逻辑运算符 用法解释
- HDOJ2005 ( 第几天? ) 【水题】
- Android数据的几种存储方式---------SharePreferences(轻量的以键值对) 的使用
- 1.MongoDB入门详解
- 微型计算机系统视频适配器为,计算机硬件基础1-微型计算机系统组成(含教材6,8,9章内容).ppt...
- c语言写一元一次函数图像,一元一次函数练习题带答案.doc
- 电脑太慢了最简单的办法怎么弄_最简单快速的方法恢复电脑误删文件-数据恢复常见问题...
- 小程序授权登录,后台发送链接,得到参数。