首页 > 其他分享 >新建 Microsoft Office Word 文档 来源:牛客网

新建 Microsoft Office Word 文档 来源:牛客网

时间:2023-01-03 15:07:38浏览次数:40  
标签:Word 删除 Office 新建 牛客 int 文档 New


题目

链接: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别有洞天

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;
}


标签:Word,删除,Office,新建,牛客,int,文档,New
From: https://blog.51cto.com/u_15926877/5985751

相关文章

  • 经商 来源:牛客网
    题目链接:https://ac.nowcoder.com/acm/contest/28886/1022时间限制:C/C++1秒,其他语言2秒空间限制:C/C++32768K,其他语言65536K64bitIOFormat:%lld题目描述小d是一个搞......
  • 利用Robots.txt优化你的WordPress站点,并在google上检查是否优化成功
    前言我发现我的网站在google上有很多多余的网站被搜索结果收录了,很烦人。很多建站新手对robots.txt文件的重要作用不是很清楚,利用这篇文章普及一下WordPress站点robots.txt......
  • WordPress网站成为Linux恶意软件目标: 19个插件和主题缺陷
    WordPress网站正成为一种以前未知的Linux恶意软件的目标,该恶意软件利用二十多个插件和主题中的缺陷来破坏易受攻击的系统。“如果网站使用此类附加组件的过时版本,缺乏关键......
  • 牛客寒假算法基础集训营4-J-Applese 的减肥计划
    链接:​​https://ac.nowcoder.com/acm/contest/330/J​​牛客网 已知Applese两只手分别产生的力的大小,以及它们之间的夹角,试求两力合力的大小。输入描述:仅一行三个整......
  • 牛客寒假算法基础集训营4-B-Applese 走方格
    链接:​​https://ac.nowcoder.com/acm/contest/330/B​​​牛客网 在这个游戏中,它位于一个n行m列的方阵中的左上角(坐标为(0,0),行的序号为0∼n−10∼n−1,列的序号为0......
  • 牛客训练(BIT+高精度)
    又是这类用BIT辅助计数的题。。这个显然满足要求的区间比不满足的要多太多,所以变成求不满足的。。。然后要先求总方案数,为这个不是很想在化了,反正O(n)求也可以的。。然后求......
  • Word 快捷键整理
    UsingWord常用快捷键:Ctrl+F4关闭当前文档Ctrl+D调出字体选项卡Alt+O+T段落选项卡Ctrl+CCtrl+VCtrl+XCtrl+ACtrl+Shift+C复制......
  • 牛客2022跨年场
    牛客2022跨年场​F题使用python,就是加了一个end='\0',然后寄了好多。A猜群名小沙为了这场元旦比赛绞尽脑汁,他现在在每个题目中藏入了一个字,收集所有的字,并将按照题号......
  • Centos /etc/fstab/出错,提示 Give root password maintenance
    1、在登陆界面可以看见提示进入紧急模式2、输入root密码,进入系统,使用mount-a尝试挂载会提示有错误的挂载这种情况我碰见的是维修后磁盘的uuid发生变化,需要修改uuid3......
  • 牛客练习赛107
    挺有难度的比赛。A求\((n!)!\modm,n,m\le1e6\)容易发现n!>m之后答案为0。B仔细看题。考虑两个序列中的1能不能都放在一号位可以的话就是最优的。不能的话考虑一个......