侧边栏壁纸
  • 累计撰写 192 篇文章
  • 累计创建 2 个标签
  • 累计收到 87 条评论

【题解】【上海】【门禁记录】

Allen Best
2023-08-06 / 0 评论 / 1 点赞 / 61 阅读 / 764 字
温馨提示:
本文最后更新于 2023-08-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
#include<bits/stdc++.h>
using namespace std;
string datas[10005];
map<string,int> vis;//vis 记录人员状态1已经进入 0 离开 
map<string,bool> in_ans;//记录人员是否违法,true 人员违法 false 不违法 
int main(){
    ios::sync_with_stdio(false);
    int n,k=0;
    cin>>n;
    while(n--){
        string s,opt;
        cin>>s>>opt;
        if(in_ans[s])continue;//已经记录违法的人员不需要重复判断 
        if(opt=="enter"){
            if(vis[s]!=0){//新进入的人状态必须是 未进入状态 
                datas[k++]=s;
                in_ans[s]=true;
            }else{
                vis[s]=1;
            }
        }else{
            if(vis[s]!=1){//离开人员状态必须是 已经进入状态 
                datas[k++]=s;
                in_ans[s]=true;
            }else{
                vis[s]=0;
            }
        }
    }
    map<string,int>::iterator i;//最后所有人的状态必须是离开 
	for(i=vis.begin();i!=vis.end();i++)
		if(i->second!=0&&!in_ans[i->first]) datas[k++]=i->first;
    sort(datas,datas+k);
    for(int i=0;i<k;i++){
        cout<<datas[i]<<" ";
    }
    cout<<endl;
    return 0;
}
0

评论区