目录
set的插入删除
vector<string>的应用
set的插入删除
数据库连接池__牛客网
[解题思路]
循环接收每组用例,对于每组用例进行如下操作:
1. 依次获取每个状态,如果该状态是"connect",则将其id插入到set中,否则删除该id
2. 获取从刚开始到目前set中的最大值
3. 输出结果
#include<iostream>
#include<unordered_set>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
string id,op;
unordered_set<string> s;
size_t maxv=0; //不可用int,因为s.size()为无符号整形
while(n--)
{
cin>>id>>op;
if(op=="connect")
s.insert(id);
else
s.erase(id);
maxv=max(maxv,s.size());//若用int则无法比较
}
cout<<maxv<<endl;
}
return 0;
}
vector<string>的应用
mkdir__牛客网
[解题思路]
只要按照题面,将前缀字符串路径和相同路径剔除,只mkdir -p最长或者唯一路径就可以解决这
个问题
循环接收每组用例,对于每组用户进行如下操作
- 对改组用例按照字典顺序排序
- 将改组用例中相等的或者前一个是后一个子串的路径剔除
- 输入结果并换行
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
vector<string> path(n);//提前初始化空间,push_back()很慢
for(int i=0;i<n;i++)//获得所有路径
cin>>path[i];
sort(path.begin(),path.end());//字典序排序
vector<bool> flag(n,true);//bool标记,实现伪删除
for(int i=0;i<n-1;i++)
{
if(path[i]==path[i+1]) flag[i]=false;//相等则删除
if(path[i].size()<path[i+1].size()&&
path[i+1].substr(0,path[i].size()) == path[i]&&
path[i+1][path[i].size()]=='/')//可能有/a和/ab情况
{
flag[i]=false;//如果该串是另一个串的子串,删除
}
}
for(int i=0;i<n;i++)
{
if(flag[i]) cout<<"mkdir -p "<<path[i]<<endl;//输出没有被删除的
}
cout<<endl;
}
return 0;
}
排列难题:
Pre-Post__牛客网