激动人心的2016.11.4模拟赛结束了

更激动人心的是我得了90分,第一次超越豪哥,特立文纪念。


3.密码

【问题描述】

哪里有压迫,哪里就有反抗。

moreD的宠物在法庭的帮助下终于反抗了。作为一只聪明的宠物,他打算把魔法使moreD的魔法书盗去,夺取moreD的魔法能力。但moreD怎么会让自己的魔法书轻易地被盗取?moreD在魔法书上设置了一个密码锁,密码锁上有一个问题。

施以斯卧铺魔法吧,你有M次机会,如此将得完美密码。

然后是一串小写字母串。

moreD的宠物斯卧铺魔法就是施法时的字符串其中相邻两位交换。

而moreD对于完美密码的定义自然是最小字典序了。

请帮助moreD的宠物,想出密码吧。

【输入格式】

第一行一个整数M,表示操作次数。

第二行一串小写字母组成的字符串S,如题目所示。

【输出格式】

输出完美密码。

【输入样例】

3

dcba

【输出样例】

adcb

【数据范围】

对于30%的数据|S|≤10

对于60%的数据|S|≤3,000

对于100%的数据8≤|S|≤100,000 M≤(|S|-8)^2+2

【后记】

宠物最终战胜了moreD,和自己的宠物快乐地生活着。

【样例解释】

先对第3,4两位施法,字符串变成dcab,然后对第2,3两位施法,字符串变成dacb,最后对第1,2两位施法,字符串变成adcb。


密码

---solution

【题目模型】

给出初始字符串和操作数,要求在操作数范围内仅使用每次交换其中相邻两位的操作使得字符串字典序尽量小。

【算法一】

深度优先搜索:每次枚举交换的位置,时间复杂度O(N^M)。期望得分30%

【算法二】

对于此类问题可以使用贪心思想:由于题目要求字典序,可以贪心地从前到后确定每一位的字母。字母肯定是从小到大地枚举,操作距离内的枚举字母的话肯定会贪心地把这个字母换入目标位置。而选择枚举的字母就是贪心地选择尽量前的字母。证明略。

时间复杂度为O(N^2),空间复杂度为O(N)。期望得分60%

【算法三】

算法二可以进行优化。

算法主要耗时在寻找每个字母目前最前是哪一个,可以用链表维护。另外目前需要的操作数可以就等于目标字母所在位置之前有多少个剩余的没有用的字母,可以用树状数组维护。

时间复杂度为O(NlogN),空间复杂度为O(N)。期望得分100%


这道题还算不错的,拿了七十分,自己弄明白了模型,想的和算法二差不多

(虽然写出代码自己看不懂)

代码70分

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
int main(){
freopen("pasuwado.in","r",stdin);
freopen("pasuwado.out","w",stdout);
int m;
cin>>m;
char a[];
scanf("%s",a);
int l=strlen(a);
char b[];
for(int i=;i<l;i++)b[i]=a[i];
sort(b,b+l);
char f;
int k;
k=m+;
int qq=;
int ji=;
for(int j=;j<l;j++){
f=b[j];ji=;
for(int i=;i<k+ji;i++){
if(a[i]=='')ji++;
if(a[i]==f){
cout<<f;
k=k-i+ji;
a[i]='';
break;
}
}
}
for(int i=;i<l;i++){
if(a[i]!='')cout<<a[i];
}
return ;
}

3.密码pasuwado————记第一次超越Candy?的更多相关文章

  1. 记第一次使用NET CORE 2.2 完成的DEMO部署在LINUX并且上线

    .NET CORE 这么久了一直没有成功打通过,今天花了点儿时间做了一个小DEMO,首次完成并且部署上线.记录一下. DEMO中只是测试了一下从MSSQL中获取数据,并且显示在页面上,涉及到了数据库连 ...

  2. 记第一次TopCoder, 练习SRM 583 div2 250

    今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...

  3. 记第一次多用户在Git提交代码

    今天第一次进行了多用户(其实就两人)在自建Git服务器提交代码. 先记录碰到的问题:首先是本地提交代码时,进行了add,commit后,在push时碰到服务器故障,待设置好服务器后,再push时,却p ...

  4. Unity3D 记第一次面试

    事情是发生在2014-03-05 周三下午 在群里面看到上海艺游急聘Unity3D开发工程师,就整理了下简历投了去!直到接到电话通知我去面试才知道 我之前是有投了简历!太忙了 以至于真的忘了,不过那个 ...

  5. 为什么你学过Java却忘光了——记第一次助教同学见面会

    大约两周之前,主讲老师刘志勇老师和我约定,让我上周四到课堂上和同学们认识.交流一下.一开始我不太明了去和大家见面要说些什么,也不太理解这么做的必要性是什么.但随着日子临近,我请教了周筠老师,周筠老师和 ...

  6. Hello Build To Win!我们是奶牛小分队!——记第一次团队作业

    Hello Build To Win!我们是奶牛小分队! section 1 组建团队 1.  队员介绍: 姓名 学号 风格 擅长技术 编程兴趣 希望软工角色 吴建瑜 2016012024 努力学习, ...

  7. 记第一次开发安卓应用——IT之家RSS阅读器

    这个学期学校开了安卓的课程,因为自己一直学习wp的开发,一直用的是.net和Silverlight这一套,也着实没有太多时间投入安卓的方向去,因为想着毕业也不从事安卓的工作,所以也一直没有怎么研究.但 ...

  8. 《国际化Web项目测试:记第一次兼职测试的经历(一)》

    疫情期间我一直在家远程办公,无意间接到了个做测试兼职的机会.在不耽搁本职工作的情况下,我从今年五月份开启了主职和副职的并行的状态.这种项目经历对于我来说算是一次全新的体验,当然也真是累的够呛.到目前为 ...

  9. 【HarmonyOS学习笔记】记第一次使用IDE

    哈喽大家好我是脸皮贼厚的小威 愚人节刚过先给大家拜个早年吧 最近在HarmonyOS官网下载了IDE,并抱着学(wan)习(wan)的心态试着跑出了Hello World,并安装到手机上 这是一个简单 ...

随机推荐

  1. oracle使用DataBase Configuration Assistant创建、删除数据库

    可以使用DataBase Configuration Assistant来创建一个心得数据库.Database Configuration Assistant简称是DBCA,是创建.配置以及管理数据库 ...

  2. [CC]点云密度计算

    包括两种计算方法:精确计算和近似计算(思考:local density=单位面积的点数 vs  local density =1/单个点所占的面积) 每种方法可以实现三种模式的点云密度计算,CC里面的 ...

  3. zookeeper清除事物日志

    dataDir=/data/zookeeper/data dataLogDir=/data/zookeeper/log       zk事物日志(快照)存放目录,高负荷工作的时候,会产生大量的日志,需 ...

  4. python成长之路-----day1----笔记(1)

    1.python语言介绍 python的创始人:Guido Van Rossum 2.python是一门什么样的语言 编程语言主要从以下几个角度进行分类:编译型,静态型,动态性,强类型定义语言和弱类型 ...

  5. python脚本生成exe可执行文件

    1.先安装第三方插件: py2exe. Get py2exe from http://www.py2exe.org/ 在download里下载与自己python对应的版本 2.写一个测试python文 ...

  6. Syntax highlighting in fenced code blocks

    Python @requires_authorization def somefunc(param1='', param2=0): r'''A docstring''' if param1 > ...

  7. spring Date JPA的主要编程接口

    Repository:最顶层的接口,是一个空接口,主要目的是为了同一所有Repository的类型,并且让组件扫描的时候自动识别. CrudRepository:是Repository的子接口,提供增 ...

  8. git 远程版本库,github提供服务原理,git自动更新发送邮件

    1.安装好Linux,安装好Git(192.168.1.239) 2.创建一个用户zph(让此用户提供git on server),密码设置为12345678 # useradd zph # pass ...

  9. c语言的一个简单的链表

    此程序为作业题: 但不忍丢弃成果: 所以记一下: 哦,对了,有一个易错点:在链表里,字符要用字符数组,不能用单个字符. #include<stdio.h>#include<stdio ...

  10. jq 弹半透明遮罩层

    jquery制作点击按钮弹出遮罩半透明登陆窗口 // )[^>]*$|^#([\w-]+)$/,M=/^.[^:#\[\.,]*$/,ka=/\S/,$= /^(\s|\u00A0)+|(\s| ...