3.密码pasuwado————记第一次超越Candy?

激动人心的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[100005];
    scanf("%s",a);
    int l=strlen(a);
    char b[100005];
    for(int i=0;i<l;i++)b[i]=a[i];
    sort(b,b+l);
    char f;
    int k;
    k=m+1;
    int qq=0;
    int ji=0;
    for(int j=0;j<l;j++){
        f=b[j];ji=0;
            for(int i=0;i<k+ji;i++){
                if(a[i]==‘0‘)ji++;
                if(a[i]==f){
                cout<<f;
                k=k-i+ji;
                a[i]=‘0‘;
                break;
                }
        }
    }
    for(int i=0;i<l;i++){
        if(a[i]!=‘0‘)cout<<a[i];
    }
    return 0;
}
时间: 2024-11-02 23:27:07

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

[杂谈]记第一次出差有感

引言 来公司后第一次出差,没想到竟然让我给赶上最蛋疼的一件事. 因 一个公司的项目,分给三家网络公司来做,这就是种的因,造成很多沟通不便,到客户这里进行部署实施时,各种数据约束不对应,各种沟通各种修改,这就是结的果. 客户将项目分给三家公司来做,出于三家公司各自擅长的领域不同,A公司擅长a技术,B公司擅长b技术,c公司擅长c技术,也就是在各自行业中小有名气的公司,就交给他们负责不同的功能,然后在将三家的功能集成,所谓的集成也是,对数据的不同处理罢了. 客户这样做本来是好事,但是,最后,却成了造就

记第一次参加产品演示!

记第一次参加产品演示 这是我工作一来第一次参加的大型会议,客户要求验收很突然,早上通知验收,下午2点开始,果然是客户最大,本来这个项目我只接触了个小尾巴,老板要求我跟着一起去,好吧,就当见见世面,增添一下人生阅历也是好的啊.于是我拿好笔纸,兴冲冲的跟着我们技术,一起去了.     到达会议室的时候,1点多,提前了一个小时,确实有点早,但毕竟路远,又怕路上堵车,只能早走.最起码我们拿出了对客户尊重的态度.到场之后,我们的技术开始做准备,而我闲着也没事干,于是翻看了最近很火的git hub 资料.都

记第一次作为面试官的经验

今天总监请假,老板邀请的人面试(毕竟老板不太了解一些技术名词).老板跟人家沟通到一半,没办法,就把我拉进去陪人家聊聊技术有关的东西(山中无老虎,猴子只能上去称大王啊).老板的要求毕竟不能拒绝,本着学习态度,我还是硬着头皮进去了,就当检测检测自己的沟通能力吧. 当我坐下的时候我一看,我拿着对面的简历的时候,吓我一跳.我自己除去实习的经历,只有两年多的经验,让我面试一个五年经验的老大哥,感觉有点心慌慌的.我当时就简单的看了一下对面老哥的简历,不能冷场啊.看到这个老哥最近项目的简述,我有样学样的问了一

记第一次用Linux搭建LAMP环境

本文为日记,并非技术博客. 嗯,没错,我决定学习linux系统了.虽然不是第一次接触命令行,不过还是挺有压力的.看了两天的Linux基础视频就开始动手搭建自己的LAMP环境. 关于为什么开始接触Linux呢,主要是最近一直在学前端的知识,想换换口味....以前自己写的小网站也都是用windows下的IIS发布的,所以心血来潮决定试试搭建一个Linux的WEB服务器.既然搭建的是WEB服务器,那么首选自然是LAMP环境,也就是Linux+apache+mysql+php啦.至于为什么是LAMP,当

最美的时光在路上 - 记第一次深马

昨天跑了深圳马拉松的半马,这是我的第二马,家门口跑马还是有些兴奋的,就因为这个兴奋劲儿,凌晨两点才入睡,朦朦胧胧睡了三个小时,5点半就不得不爬起来洗洗涮涮了,吃了准备好的早餐,坐第一班地铁奔赴市民中心,到达市民中心,已经是人山人海了,各方跑友汇聚于此.话说,这两年跑步是越来越火,我是觉得和现在各种跑步APP的兴起有关,有了这些记步APP,跑了步晒下,朋友们点点赞,这些正向反馈让你跑步的心气就有更足了,其他运动可能很难通过什么APP有这样的体验. 时间紧,存了包,就赶紧往起点一点点的挤(人多,真的

记第一次被辞职

昨天晚上加班到夜里3点才睡觉,今天一天都困得不行. 下午那会儿还在忙着做今天要上的活动页面,CTO突然把我叫出去谈话.大概内容就是总结下我这4个月的工作情况,接着表明态度,“我不太适合公司团队”. 其实这句话我早有预料,刚入职一个多月的时候,我们就谈过一次话,CTO希望我每天多加加班,毕竟咱们是“创业公司”. 我说好啊. 其实刚入职那半个月,我也是天天加班到10点才回家.加班费呢,入职的时候就说过是没有的,饭补我一开始以为会有,车费报销我也以为很方便. 当然,一切都只是我以为啦..     后来

记第一次NOIP之旅

Day 1 80分 周六一大早晨去试机,和cyl大佬谈笑风生,和同学一起去旁边的咖啡店吃了顿饭 比赛开始后输入密码解压试题,结果我输错了十多次--十分尴尬 本来也没指望能拿分,但是对着第一题瞅了一个小时之后突然就有灵感了--大概思路就是枚举+优化,然后调试输出用了两个小时终于对了-- 接下来匆匆看了剩下的题,发现好像都不怎么会,第二题应该是个数据结构,在哪里看到过,可惜忘了 第三题完全没有思路,写了个暴力,估计应该没得分 Day 2 0分 又输错密码了-- 看了看三道题,发现都不怎么会 第一道题

CACTI密码不记得了

进入到系统:执行:[[email protected] ]# mysql -u root -pmysql> show databases; mysql> use cacti;mysql> show tables; mysql> select * from user_auth;update user_auth set password=md5("newpassword") where id='1'; 新的cacti密码就是newpassword了~~

记第一次面试

想着这个大三暑假在合肥本地找个实习,就在实习僧投了好几家 Java 实习生,可等了三天都没反应..然后听说 Boss 直聘比较好,于是又上 Boss 直聘投了两家.可信息全部有去无回.. 不过说来运气也好,周五的时候,Boss 直聘上就有位面试官主动联系到我,招 Python 爬虫工程师,真是意外之喜. 然后今天电话里聊了聊,也没做啥准备,下午就进行了一次简单的面试.感觉答的还挺好的,面试官问的也简单,(远没网上各 BAT 面经那么恐怖)下面我简单地回顾一下,就只写我还记得的了: 什么是 OOP