题意:

瑞神今年大三了,他在寒假学会了英文的26个字母,所以他很兴奋!于是他让他的朋友TT考考他,TT想 到了一个考瑞神的好问题:给定一个字符串,从里面寻找连续的26个大写字母并输出!但是转念一想, 这样太便宜瑞神了,所以他加大了难度:现在给定一个字符串,字符串中包括26个大写字母和特殊字 符’?’,特殊字符’?'可以代表任何一个大写字母。现在TT问你是否存在一个位置连续的且由26个大写字 母组成的子串,在这个子串中每个字母出现且仅出现一次,如果存在,请输出从左侧算起的第一个出现 的符合要求的子串,并且要求,如果有多组解同时符合位置最靠左,则输出字典序最小的那个解!如果 不存在,输出-1! 这下HRZ蒙圈了,他刚学会26个字母,这对他来说太难了,所以他来求助你,请你帮 他解决这个问题,报酬是可以帮你打守望先锋。
说明:字典序 先按照第一个字母,以 A、B、C……Z 的顺序排列;如果第一个字母一样,那么比较第二 个、第三个乃至后面的字母。如果比到最后两个单词不一样长(比如,SIGH 和 SIGHT),那么把短者排 在前。例如
上面两种填法,都可以构成26个字母,但是我们要求字典序最小,只能取前者。
注意,题目要求的是 第一个出现的,字典序最小的!、

输入格式
输入只有一行,一个符合题目描述的字符串。
输出格式
输出只有一行,如果存在这样的子串,请输出,否则输出-1

样例输入1
AB??EFGHIJKLMNOPQRSTUVWXYZ
样例输出1
ABCDEFGHIJKLMNOPQRSTUVWXYZ
样例输入2
AABCDEFGHIJKLMNOPQRSTUVW??M
样例输出2
-1


思路:

题目为了得到第一个连续的26个大写字母串,我们可以维护一个区间,区间的左端点我们用“ l ”表示,表示在字符串中的位置,右端点即为我们遍历区间时的位置,这个区间有这些特点:里面的除“?”以外的字符都不重复;区间的长度小于等于26。

为了判断某个字符是否在区间内部,我们设立一个bool数组cha用来判断在或不在,同时我们还设立一个数组用来表示某元素在区间里时在字符串中的位置。

bool cha[26] = { false };
long long lo[26];

我们从字符串的首位开始遍历,若是遍历到"?",此时判断区间长度是否已经是26,若是则区间已确定跳出遍历,若不是则继续遍历下一个元素;当我们遍历到非“?”的字符时,则要判断是不是已经在区间内,若不在,则将cha里的对应元素设为true,记录位置到lo数组中;若是已经在,则我们需要“ l ”进行移动,移动到上一次出现这个字符的位置的后一个(因为保证区间内只能有一个他,就只能l向后移动),此时从上一个l的位置到上一次出现这个字符的位置的前一个元素已经全部从区间中移除了,我们需要将cha数组里的元素设为false。注意这时候一定要将lo的位置更新为这个元素现在的位置 ,因为忘了这一步扣了60分 。

输出的时候如果字符串里面有“?”的话我们需要遍历cha数组,找到第一个为false的位置,输出他所对应的字符,这样才能满足字典序最小。


总结:

对于这种找到第一个满足某种条件的字符串,我们可以维护一个区间,通过移动区间的端点进行维护,注意到达目标时的判断条件。


代码:

#include<string>
#include<iostream>
using namespace std;bool cha[26] = { false };
long long lo[26];int main()
{string str;cin >> str;long long l = 0;long long r = -1;long long size = str.size();for (long long i = 0; i < size; i++){if (str[i] == '?'){if ((i - l + 1) == 26){r = i;break;}else continue;}if (cha[str[i] - 'A'] == true) //existed{for (long long m = l; m < lo[str[i] - 'A']; m++){cha[str[m] - 'A'] = false;}l = lo[str[i] - 'A'] + 1; //l to 上一次出现的后面lo[str[i] - 'A'] = i;//lo重定位}else{cha[str[i] - 'A'] = true;lo[str[i] - 'A'] = i;}if ((i - l + 1) == 26){r = i;break;}}if (r == -1){cout << -1;}else{int now = 0;for (long long m = l; m <= r; m++){if (str[m] != '?')cout << str[m];else{for (int p = now; p < 26; p++){if (cha[p] == false){cout << (char)(p + 'A');now = p + 1;break;}}}}}
}

csp m2 HRZ学英语相关推荐

  1. 程序设计思维(CSP模拟题)B - HRZ 学英语

    题目 瑞神今年大三了,他在寒假学会了英文的26个字母,所以他很兴奋! 于是他让他的朋友TT考考他,TT想到了一个考瑞神的好问题:给定一个字符串,从里面寻找 连续的26个大写字母 并输出! 但是转念一想 ...

  2. SDU程序设计思维实践题目总结

    题目来源及链接 题目名称及讲解博客链接 涉及算法 原题以及原题链接 第二周作业 Maze BFS POJ-3984 Pour water BFS POJ-1606 第二周实验 化学 模拟 codefo ...

  3. 程序设计思维与实践 CSP-M2 (3/4/数据班)

    HRZ的序列 题意: 相较于咕咕东,瑞神是个起早贪黑的好孩子,今天早上瑞神起得很早,刷B站时看到了一个序列a,他对这个序列产生了浓厚的兴趣. 他好奇是否存在一个数K,使得一些数加上K,一些数减去K,一 ...

  4. 程序设计思维与实践 CSP-M2

    HRZ的序列 相较于咕咕东,瑞神是个起早贪黑的好孩子,今天早上瑞神起得很早,刷B站时看到了一个序列a,他对这个序列产生了浓厚的兴趣,他好奇是否存在一个数K,使得一些数加上K,一些数减去K,一些数不变, ...

  5. CSP 201409-5 拼图问题(给出一个n×m的方格图,现在要用如下L型的积木拼到这个图中......)

    CSP 201409-5 拼图问题 一.题目信息 第一次写博客,有什么疏漏之处,欢迎各位大佬指出<(* ̄▽ ̄*)/ 题目要求 试题编号 201409-5 试题名称 拼图 时间限制 3.0s 试题 ...

  6. 运动想象| EEG信号、共空间模式算法(CSP)

    摘要 作为一种特殊的人机交互模式,脑-机接口(brain-computer interface, BCI)技术成为了当前信息交互的研究热点.其中脑电信号(electroencephalography, ...

  7. CSP(共空间模式)的python实现

    数据来源(bbci竞赛数据graz两分类) 链接:https://pan.baidu.com/s/1GVPp2UBDiIUng6PlVU23uw 提取码:7jal 代码 def csp_yx(EEGS ...

  8. CSP 历年第一二题汇总

    早年大部分使用java写的,提交是需要将public class xx {}改为 public class main{},否则编译无法通过. 目前全部的前两题都已经解答完毕,出了202012月份的第二 ...

  9. CCF CSP 201609-2 火车购票

    题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...

  10. Go 分布式学习利器(19)-- Go并发编程 之 CSP(communicating sequential processes) 机制

    文章目录 前言 CSP 特点 CSP代码 演示 1. 正常流程的代码 2. CSP 未设置buffer 代码 3. 设置指定大小的channel buffer 总结 前言 CSP 这个名词大家会比较陌 ...

最新文章

  1. Android开发之GridView的使用(解读谷歌官方API)
  2. 【效率】如何有效提问
  3. python3中的int类型占64位_在windows 10 64位计算机中,默认情况下,numpy数组数据类型将以int32形式出现...
  4. Jobdu MM分水果
  5. mongodb 多表查询
  6. Java高级语法笔记-多个异常处理
  7. Notepad++中Windows,Unix,Mac三种格式之间的转换(换行符的转换)
  8. C语言的5种存储类以及关键字volatile、restrict
  9. React:Hook
  10. 【毕业设计】基于大数据的电影数据爬取分析可视化系统
  11. 如何建立个人网站:从搭建到运营再到盈利
  12. 坐月子 请月嫂吗?如何请月嫂?
  13. 微信公众号发布时间的技巧?
  14. Matlab求解线性方程组(一)共轭梯度法
  15. P1325 雷达安装
  16. 数学建模美赛前期准备
  17. labview myRIO驱动mpu6050
  18. 三星PM981黑苹果补丁
  19. 【历史上的今天】5 月 8 日:jQuery 之父诞生;闪存的发明者出生;戴尔收购 Alienware
  20. esp32第一篇:试用

热门文章

  1. 自学单片机是否先学c语言,学习单片机一定要先学好C语言再去学单片机吗
  2. 关于资金调拨系统的设计方法论
  3. 保护眼睛,绿豆沙颜色的RGB值和HSL值
  4. 第79句 How Silicon Valley Puts the ‘Con’ in Consent硅谷的许可骗术
  5. Xposed插件Android.EagleEye
  6. 【STM32】Fault 类异常_记一次STM32中HardFault问题的调试解决
  7. 微信小程序 java nodejs校园自动点餐系统
  8. 剑芒罗曼史2解图片程序
  9. rest api解决url参数中带点的问题,REST正则匹配
  10. dwt:动态时间规整