搜狐[编程题]彩色宝石项链.有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等
来源:互联网 发布:cf游戏数据异常怎么办 编辑:程序博客网 时间:2024/06/02 16:16
时间限制:1秒
空间限制:32768K
有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等。有一天国王把项链赏赐给了一个学者,并跟他说,你可以带走这条项链,但是王后很喜欢红宝石,蓝宝石,紫水晶,翡翠和钻石这五种,我要你从项链中截取连续的一小段还给我,这一段中必须包含所有的这五种宝石,剩下的部分你可以带走。如果无法找到则一个也无法带走。请帮助学者找出如何切分项链才能够拿到最多的宝石。
输入描述:
我们用每种字符代表一种宝石,A表示红宝石,B表示蓝宝石,C代表紫水晶,D代表翡翠,E代表钻石,F代表玉石,G代表玻璃等等,我们用一个全部为大写字母的字符序列表示项链的宝石序列,注意项链是首尾相接的。每行代表一种情况。
输出描述:
输出学者能够拿到的最多的宝石数量。每行一个
示例1
输入
ABCYDYEATTMBQECPD
输出
13
#include <iostream>#include <string>#include <map>int main(void){ std::string str; while(std::cin >> str) { std::map<char,int> mp; mp['A'] = 2; mp['B'] = 3; mp['C'] = 5; mp['D'] = 7; mp['E'] = 11; for(int i=1; i<=21; ++i) mp['E'+i] = 1; int len = str.length(); int min = len; for(int i=0; i< len; ++i) { //从第i开始到i-1截止(首尾循环),找到包含ABCDE的最短的段, int result = 2310; for(int j=i; j<2*len;) { if(result % mp[str[j%len]] == 0 ) result = result / mp[str[j%len]]; j++; //j++ 假设i=2,j=13.那么这里包含14个长度 if(result == 1) //找到了这个段 { if(j - i < min) min = j-i; break; }/*j是内圈的位置,注意j已经++了。此时如果j%len == i表示首尾循环了一圈了。假设i=5,那么刚刚j没自加之前,是j=4进行了比较,此时加加,第5个位置的数在最开始就比较了,因此这一圈已经循环完了。应该跑到i=6的位置重新下一个循环*/ if(j%len == i) break; } } std::cout << len - min <<std::endl; } return 0;}
阅读全文
0 0
- 搜狐[编程题]彩色宝石项链.有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等
- 彩色宝石项链-搜狐编程
- 彩色宝石项链
- 搜狐笔试题目一彩色宝石项链
- 彩色宝石项链C/C++解决
- 【代码和思路都有】2017面试题:搜狐,彩虹宝石项链
- 丢掉宝石的孩子
- 丢掉宝石的小孩
- 彩色项链
- 串起珍珠的项链
- 打宝石的“不努力”方法
- 来自闪闪宝石的光芒
- 划分宝石问题(2017搜狐笔试题)
- 世界八颗最著名的宝石
- 人生感悟:丢掉宝石的孩子
- 宝石塔防的贴吧地址:
- PHP SPL,被遗落的宝石
- 一颗璀璨的月光宝石--Lua
- 将tf.batch_matmul替换成tf.matmul
- js匿名函数
- C# WinForm中DateTimePicker控件的Text属性和Value属性
- 模式相似性测度-距离
- 第一阶段_第三部分_光照与GI
- 搜狐[编程题]彩色宝石项链.有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等
- Unity Collider Trigger
- 9_hibernate基础配置_注解
- Java设计模式-装饰器模式
- 代理模式
- 面试OR笔试12——二叉树转化为链表
- MSSQL收缩日志文件
- PAT乙级1037. 在霍格沃茨找零钱(20)
- 一、为什么选择SpringBoot