【“新智认知”杯上海大学联赛】D-CSL的字符串(贪心)
题目地址:https://ac.nowcoder.com/acm/contest/551/D
题目描述
CSL 以前不会字符串算法,经过一年的训练,他还是不会……于是他打算向你求助。
给定一个字符串,只含有可打印字符,通过删除若干字符得到新字符串,新字符串必须满足两个条件:
- 原字符串中出现的字符,新字符串也必须包含。
- 新字符串中所有的字符均不相同。
- 新字符串的字典序是满足上面两个条件的最小的字符串。
输入描述:
仅一行,有一个只含有可打印字符的字符串 s。
|s|≤105|s|≤105
输出描述:
在一行输出字典序最小的新字符串。
示例1
输入
bab
输出
ab
示例2
输入
baca
输出
bac
备注:
ASCII字符集包含 94 个可打印字符(0x21 - 0x7E),不包含空格。
解题思路:
若只考虑字符x 右边的 字符y的字典序是否比x的小来决策是否删除x,那么当删掉一个后又要重新考虑真个串,没有办法做,要转换思路。
因为要求字典序最小,所以每次遍历的时候都要从0x21 - 0x7E(33~127)一次遍历寻找可以作为结果的字符。(以这个为基础才保证了后面想法的正确性!)
last[]记录字符最后一次出现的位置,vis[]出现标注数组,ans[]标记字符是否已经作为答案,st为在字符串中寻找某个字符时的起始位置。
len记录字符串中出现不同字符的数目=答案的长度
第一层循环len次,每次都找出一个符合条件的字母作为答案。
第二层循环遍历[33,127],对于一个满足vis[x]=1&&ans[x]=0的字符x,寻找它在指定范围内出现的位置i,
第三层循环遍历[33,127],如果这个位置i之前存在最后出现的字符j(ans[j]=0)即last[j]<i则暂时不能把x作为结果。否则遍历完之后都没有找到ans[j]=0&&last[j]<i的,则说明i前面的字符都在i后面出现了或者i前面的字符(即使它的字典序比x小)都已经做了答案,且x的字典序是目前最小的,即把x作为答案,st=i+1,i(包括i)前面的字符都不用再考虑了。
举例:
i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
s[i] | c | b | c | a | c | b | e | f | e | a | c | b | c |
last[s[i]] | ✅ | ✅ | ✅ | ✅ | ✅ |
把s[3]换成e试试看。手动模拟一下即可。
ac代码:
#include <iostream>
#include <algorithm>
#include <string.h>
#include <ctype.h>
#include <set>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <sstream>
#define maxn 200//33~127
using namespace std;
typedef long long ll;
int vis[maxn]={0},ans[maxn]={0},last[maxn],len=0,st=0;
string s,res;
bool ok(int x)
{int t;for(t=st;t<s.length();t++)if(s[t]==(char)x)break;for(int j=33;j<=127;j++)if(vis[j]&&!ans[j]&&last[j]<t)return false;//在x之前出现了最后一次出现的字符,则暂时不将x作为答案st=t+1;//下次遍历从保留字母位置的下一个开始return true;//若x之前出现了last[j]>i的,又因为x的字典序是由贪心来的最小,所以i之前重复的字母都可删掉只保留x
}
char geta()
{int i;for(i=33;i<=127;i++)if(vis[i]&&!ans[i]&&ok(i))//出现过且答案中没有出现,且可以作为答案{ans[i]=1;break;}return char(i);
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);memset(last,-1,sizeof(last));cin>>s;//len=(int)s.length();for(int i=0;i<s.length();i++){if(!vis[s[i]]){len++;vis[s[i]]=1;}last[s[i]]=i;}for(int i=0;i<len;i++)res+=geta();cout<<res<<endl;return 0;
}
【“新智认知”杯上海大学联赛】D-CSL的字符串(贪心)相关推荐
- “新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛 B.CSL 的英语考试
CSL 的英语考试 CSL 为了备战即将到来的六级考试,在外面报了一个英语培训班.经过了一学期的学习后,英语老师决定要对 CSL 的学习成果进行检测.老师准备了一份卷子,考虑到 CSL 的英语水平,卷 ...
- “新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛----G-CSL的训练计划
首先发出题目链接: 链接:https://ac.nowcoder.com/acm/contest/551/F 来源:牛客网 涉及:有向图 题目如下: 题目意思(表示我太chun,读了几遍才勉强明白了题 ...
- 智源杯天文数据算法挑战赛开赛,前沿AI技术助力天文科学研究
由北京智源人工智能研究院主办,国家天文台.数据评测平台biendata联合举办的天体分类数据竞赛于2020年1月开赛.本次比赛旨在鼓励大众参与到天文学的探索当中,利用最新的人工智能算法分析望远镜收集到 ...
- 蓝驰创投朱天宇:用10年尺度看 AI 创业,如何发现独角兽 | 新智元专访
2017年1月20日,新智元百人会闭门论坛,蓝驰创投管理合伙人朱天宇从投资人的角度,带来<用10年的尺度看AI 创业,对下一个创新周期思考>的主题分享. 在分享开始前,朱天宇拿出了一本&l ...
- 中国AI行业走向:新人胜旧人还是 BAT 牢牢掌握价值链顶端? | 新智元投资领袖论坛...
2017年3月27日,在新智元开源·技术峰会的AI 投资领袖论坛,在北京大学人工智能创新中心主任雷鸣的支持下,红杉资本中国基金合伙人计越:高瓴资本集团合伙人洪婧:蓝驰创投管理合伙人朱天宇:中科招商集团 ...
- 新智元【Yoshua Bengio 亲自解答】机器学习 81 个问题及答案(最全收录)
原文地址:http://valser.org/thread-828-1-1.html 新智元编译1 来源:Quora 译者:张巨岩 王婉婷 李宏菲 戴秋池 这是 Quora 的最新节目,针对特定 ...
- 徐立:1200层神经网络夺冠ImageNet,深度学习越深越好?| 新智元 AI 领军人物专访...
人工智能领域的创业浪潮中,计算机视觉技术(CV)可以说是一个较为火热的方向,呈遍地开花之势.在这片江湖中,有四家公司特别突出,有 CV 领域的"一桶筐汤" 之称,可以看成是具有巨大 ...
- 第八届育才杯机器人比赛_疫情防控常态化,传统赛事新转型 “育才杯”第九届青岛国际象棋学校锦标赛(网络)顺利举办...
原标题:疫情防控常态化,传统赛事新转型 "育才杯"第九届青岛国际象棋学校锦标赛(网络)顺利举办 "育才杯"青岛市国际象棋学校锦标赛是一项传统赛事,去年举办了第八 ...
- DeepMind哈萨比斯对话哈里王子:2018年AI最大的突破在生物或化学 2017-12-29 新智元 新智元报道 编辑:刘小芹 胡祥杰 【新智元导读】BBC 电台第四台连续第14年在
DeepMind哈萨比斯对话哈里王子:2018年AI最大的突破在生物或化学 2017-12-29新智元 新智元报道 编辑:刘小芹 胡祥杰 [新智元导读]BBC 电台第四台连续第14年在圣诞和新年之间 ...
- 【深度学习看手相】台湾学生获奖 AI 项目是科学还是伪科学? 搜狐科技 08-06 12:44 1新智元报道 来源: medium,facebook 编译:胡祥杰 张易 【新智元导读】本周日带来一个有
[深度学习看手相]台湾学生获奖 AI 项目是科学还是伪科学? 搜狐科技 08-06 12:44 1新智元报道 来源: medium,facebook 编译:胡祥杰 张易 [新智元导读]本周日带来一个有 ...
最新文章
- php yield 导出文件,PHP yield 读取大文件
- 身为Java程序员,这些开源工具你一定要学会!
- Qt QPushButton圆形图片设置为背景
- 用nginx做了一下反向代理,得到的ip地址都是127.0.0.1
- 移植mysql到嵌入式ARM平台
- 从没想过会有一个这样的机会|大疆招聘
- GPRS管理与创建APN拨号连接
- mysql迁移数据目录,这个坑你遇到过吗?
- NProxy——Mac和Linux平台下的Fiddler
- fer2013表情数据集
- chirp信号频谱(三角波和锯齿波)
- ThinkPHP商城分类无限分类遍历数据
- css通过行内样式绑定背景图片
- OC dyld750调用分析
- 杰理之ifi_camera跑sfc的启动时间【篇】
- 使用AccessibilityService(无障碍服务)自动完成手机设置功能
- 抖音一姐直播笑唱国歌被封,网友:早就该封了!
- 开放平台–扫描微信二维码登录
- Win10双屏显示设置教程
- 单片机开发无线控制系列-单片机端代码实现
热门文章
- 关于PC机相关系统的远程桌面协作的相关介绍和配置(转帖整理)
- 《MySQL必知必会》学习笔记——第五章(排序检索数据)
- Linux 找不到qt,linux – CMake找不到QtCore
- ARM开发7.5.2 基础实训( 6 ) 4×4 矩阵键盘和 2 路 LED 显示系统( 2 )--LPC21XX
- 小程序 ---- (获取手机号码)
- python 拟合分布_如何使用python将weibull分布拟合到数据?
- 【转】java中的Map集合
- 处理非window设置为window的Owner
- Wordvec_句子相似度
- 第34届越秀区青少年科技创新大赛_创客集结号上报名已开始啦