题目

链接:https://ac.nowcoder.com/acm/contest/28886/1015
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

CSL正在学习《计算机办公自动化》文件的建立与删除。

CSL发现,当他新建一个word文档时,会得到一个名为"新建 Microsoft Office Word 文档.doc"的文件,再新建一个,则名为"新建 Microsoft Office Word 文档(2).doc",再新建,便是"新建 Microsoft Office Word 文档(3).doc"。不断新建,编号不断递增。倘若他已经新建了三个文档,然后删除了"新建 Microsoft Office Word 文档(2).doc",再新建一个就又会得到一个"新建 Microsoft Office Word 文档(2).doc"。

严格来说,Windows在每次新建文档时,都会选取一个与已有文件编号不重复的最小正整数作为新文档的编号。

现在,请你编程模拟以上过程,支持以下两种操作:

New:新建一个word文档,反馈新建的文档的编号;

Delete id:删除一个编号为id的word文档,反馈删除是否成功。

初始时一个文件都没有,"新建 Microsoft Office Word 文档.doc"的编号算作1。

输入描述:

第一行一个正整数n表示操作次数,接下来n行,每行表示一个操作。若该行为"New",则表示新建,为:Delete id"则表示要删除编号为id的文档,其中id为一个正整数。操作按输入顺序依次进行。操作次数不超过100000,删除编号的数值不超过100000。

输出描述:

对于输入的每一个操作,输出其反馈结果。对于新建操作,输出新建的文档的编号;对于删除操作,反馈删除是否成功:如果删除的文件存在,则删除成功,输出"Successful",否则输出"Failed"。

​ 示例1

输入

12
New
New
New
Delete 2
New
Delete 4
Delete 3
Delete 1
New
New
New
Delete 4

输出

1
2
3
Successful
2
Failed
Successful
Successful
1
3
4
Successful

题解

在这道题目里要反其道而行,我仅仅需要记录在插入之后删除的,这样才好找到空闲的位置

这道题目有两个解题方法

  1. 使用priority_queue:在优先队列里边扔进去空缺的位置,用数组标记是不是空缺

    new过程:logN 或者 1;

    delete过程:log N或者1;

  2. 使用set(treeset)[可以支持自定义排序还有标准排序]

    相比于优先队列的优势与不足

    • 使用它也仅仅是为了找到最小值,它的功能没有被放大
    • 如果硬生生地使用set的查找功能,则不必创建数组,但是它的时间复杂度会变成log N

在这道题目里边,反其道而行,但是不会增添额外的时间开销,是因为有index来划分范围.

set别有洞天

https://blog.csdn.net/u012604810/article/details/79804928

set可以进行自定义排序!!!(但是它默认是用最小值排的)

struct cmp {
bool operator () (const int a,const int b)const
{
return a < b;
}
};

代码

我为了锻炼set,使用set来搞事情,同时,牺牲一点时间复杂度,抛弃使用数组来存储

#include <iostream>
#include <set>
using namespace std;
struct cmp {
bool operator () (const int a,const int b)const
{
return a < b;
}
};
set<int, cmp>st;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int index = 0;//使用索引来划定一下范围,不然的话,要把所有没有新建的都搞进set,有点划不来
int T;
cin >> T;
while (T--)
{
char s[12];
cin >> s;
if (s[0] == 'N')//新建
{
if (st.empty())
{
index++;
cout << index << endl;
}
else
{
auto it = st.begin();
cout << *it << endl;
st.erase(it);
}
}
else//删除
{
int in;
cin >> in;
if (in > index)
{
cout << "Failed" << endl;
}
else
{
auto it = st.find(in);
if (it == st.end())//存在这个元素
{
cout << "Successful" << endl;
st.insert(in);
}
else//这个元素已经被删除
{
cout << "Failed" << endl;
}
}
} }
return 0;
}

新建 Microsoft Office Word 文档 来源:牛客网的更多相关文章

  1. 使用ABAP编程实现对微软Office Word文档的操作

    SAP ABAP里提供了一个标准的类CL_DOCX_DOCUMENT,提供了本地以".docx"结尾的微软Office word文档的读和写操作. 本文介绍了ABAP类CL_DOC ...

  2. 用注册表清除Office Word文档杀手病毒

    不久前,笔者打开word文件时遇到了一件离奇的怪事,常用的Word文件怎么也打不开,总是出现提示框:"版本冲突:无法打开高版本的word文档".再仔细查看,文件夹里竟然有两个名字一 ...

  3. tokitsukaze and Soldier 来源:牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28886/1004 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K, ...

  4. 第k小 来源:牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28886/1003 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K, ...

  5. XWPFDocument创建和读取Office Word文档基础篇(一)

    注:有不正确的地方还望大神能够指出,抱拳了 老铁!   参考API:http://poi.apache.org/apidocs/org/apache/poi/xwpf/usermodel/XWPFDo ...

  6. java 使用 POI 操作 XWPFDocumen 创建和读取 Office Word 文档基础篇

    注:有不正确的地方还望大神能够指出,抱拳了 老铁! 参考 API:http://poi.apache.org/apidocs/org/apache/poi/xwpf/usermodel/XWPFDoc ...

  7. 如何用word文档在博客里发表文章

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  8. 算法提高 新建Microsoft Word文档

      算法提高 新建Microsoft Word文档   时间限制:1.0s   内存限制:256.0MB      问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出 ...

  9. C语言 · 新建Microsoft Word文档

    算法提高 新建Microsoft Word文档   时间限制:1.0s   内存限制:256.0MB      问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出的题 ...

随机推荐

  1. 微信新菜单类型 article_id 设置教程

    前不久, Senparc.Weixin SDK 跟随微信更新的步伐,上线了新的素材管理接口,其中也涉及到了 article_id 类型的自定义菜单接口. 本文将演示如何使用新的菜单类型. 官方文档传送 ...

  2. wsgiref模块,动静态网页,jinja2模块,django

    基于wsgiref模块搭建服务端 from wsgiref import simple_server def run(request, response): """ :p ...

  3. 2.0 vue循环和方法调用

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. ASCII&Base64

    ASCII https://zh.wikipedia.org/wiki/ASCII American Standard Code for Information Interchange,美国信息交换标 ...

  5. 29. Divide Two Integers - LeetCode

    Question 29. Divide Two Integers Solution 题目大意:给定两个数字,求出它们的商,要求不能使用乘法.除法以及求余操作. 思路:说下用移位实现的方法 7/3=2, ...

  6. 论文解读(SCGC))《Simple Contrastive Graph Clustering》

    论文信息 论文标题:Simple Contrastive Graph Clustering论文作者:Yue Liu, Xihong Yang, Sihang Zhou, Xinwang Liu论文来源 ...

  7. 推荐一款新框架PyScript:在 HTML 嵌入 Python 代码!

    一.介绍 网页浏览器是目前世界上最普遍,最可携的计算机环境.几乎所有人都可以在计算机或是手机上使用网页浏览器,以没有基础设施障碍的方式访问程序. 在 PyCon US 2022 上,知名 Python ...

  8. python之三元表达式与生成式与匿名与内置函数(部分)

    目录 三元表达式 各种生成式 列表生成式(可同样作用于集合) 字典生成式 匿名函数 重要内置函数 map() zip() filter() reduce() 常见内置函数(部分) 三元表达式 三元表达 ...

  9. 『忘了再学』Shell基础 — 20、Shell中的运算符

    目录 1.Shell常用运算符 2.Shell中数值运算的方法 (1)方式一 (2)方式二 (3)方式三(推荐) 1.Shell常用运算符 Shell中常用运算符如下表: 优先级数值越大优先级越高,具 ...

  10. 管理订单状态,该上状态机吗?轻量级状态机COLA StateMachine保姆级入门教程

    前言 在平常的后端项目开发中,状态机模式的使用其实没有大家想象中那么常见,笔者之前由于不在电商领域工作,很少在业务代码中用状态机来管理各种状态,一般都是手动get/set状态值.去年笔者进入了电商领域 ...