TB椰程 TypeBuddy 打字搭子

图书管理

一本通·提高篇 · 代码 · cpp · 难度 3/5 · 共 1008 字

哈希集合存书名,find查存在性

  • 一本通
  • 例

正文

// 原题:https://oj.yecheng.tv/p/T1456
// 题意:第一行 n,随后 n 行 "add 书名" 或 "find 书名"(书名可含空格),每个 find 输出该书名是否已存在。
// 思路:哈希表存书名;整行读入后按第一个空格切出指令与书名,add 插入、find 查询,大小写敏感直接比字符串。
// 复杂度:O(n×|s|) 时间 / O(n×|s|) 空间
// 易错点:书名含空格必须 getline 整行读,读完 n 后要先吃掉行尾换行;大小写不同视为不同书。
#include <bits/stdc++.h>
using namespace std;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    if(!(cin>>n)) return 0;
    string line;
    getline(cin,line);
    unordered_set<string> book;
    book.reserve((size_t)n*2+1);
    for(int i=0;i<n;i++){
        if(!getline(cin,line)) return 0;
        if(!line.empty()&&line.back()=='\r') line.pop_back();
        string op,name;
        size_t p=line.find(' ');
        if(p==string::npos){
            op=line;
        }else{
            op=line.substr(0,p);
            name=line.substr(p+1);
        }
        if(op=="add"){
            book.insert(name);
        }else if(op=="find"){
            cout<<(book.count(name)?"yes":"no")<<'\n';
        }
    }
    return 0;
}

一本通·提高篇的其它内容

打字首页 · 词库画廊 · 编程打字 · 指法入门 · 天梯榜 · 数据分析 · 班级课堂 · 关于我们
椰程 TypeBuddy 打字搭子 —— 键盘指法练习 · 单词记忆 · 班级课堂 · 在线 PK