zoukankan      html  css  js  c++  java
  • 牛客小白月赛6 G 指纹锁 set的自动排序 模板

    链接:https://www.nowcoder.com/acm/contest/136/G
    来源:牛客网

    题目描述

        HA实验有一套非常严密的安全保障体系,在HA实验基地的大门,有一个指纹锁。
        该指纹锁的加密算法会把一个指纹转化为一个不超过1e7的数字,两个指纹数值之差越小,就说明两个指纹越相似,当两个指纹的数值差≤k时,这两个指纹的持有者会被系统判定为同一个人。
        现在有3种操作,共m个,
    操作1:add x,表示为指纹锁录入一个指纹,该指纹对应的数字为x,如果系统内有一个与x相差≤k的指纹,则系统会忽略这次添加操作
    操作2:del x,表示删除指纹锁中的指纹x,若指纹锁中多个与x相差≤k的指纹,则全部删除,若指纹锁中没有指纹x,则可以忽略该操作,
    操作3:query x,表示有一个持有指纹x的人试图打开指纹锁,你需要设计一个判断程序,返回该人是否可以打开指纹锁(只要x与存入的任何一个指纹相差≤k即可打开锁)。
        初始状态,指纹锁中没有任何指纹。

    输入描述:

    第一行有2个正整数m,k。
    接下来m行,每行描述一种操作:add x,del x或query x。

    输出描述:

    对于每个query操作,输出一行,包含一个单词“Yes”或“No”,表示该人是否可以打开指纹锁。
    示例1

    输入

    复制
    4 3
    add 1
    add 10
    query 5
    query 4

    输出

    复制
    No
    Yes
    示例2

    输入

    复制
    4 3
    add 1
    query 4
    del 1
    query 4

    输出

    复制
    Yes
    No
    示例3

    输入

    复制
    6 3
    add 10
    query 10
    add 5 
    query 5
    del 7		//系统将指纹10和指纹5全部删除
    query 8

    输出

    复制
    Yes
    Yes
    No

    备注:

    对于100%的测试数据:
    1 ≤ k,m ≤ 1000000
    数据量较大,注意使用更快的输入输出方式。


    分析:赛后看别人的代码,get到了新知识点,set可以自动定义排序还可以定义是否可以插入。。
    AC代码:
    #include <map>
    #include <set>
    #include <stack>
    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <vector>
    #include <string>
    #include <bitset>
    #include <cstring>
    #include <iomanip>
    #include <iostream>
    #include <algorithm>
    #define ls (r<<1)
    #define rs (r<<1|1)
    #define debug(a) cout << #a << " " << a << endl
    using namespace std;
    typedef long long ll;
    const ll maxn = 1e6+10;
    const double eps = 1e-8;
    const ll mod = 1e9 + 7;
    const int inf = 0x3f3f3f3f;
    const double pi = acos(-1.0);
    ll m, k;
    struct cmp {    //自定义排序规则,差值小于k的加不进集合
        bool operator() ( ll a, ll b ) {
            if( abs(a-b) <= k ) {
                return false;
            }
            return a < b;
        }
    };
    int main() {
        ios::sync_with_stdio(0);
        cin >> m >> k;
        set<ll,cmp> s;
        while( m -- ) {
            string str;
            ll x;
            cin >> str >> x;
            if( str[0] == 'a' ) {
                if( s.find(x) == s.end() ) {
                    s.insert(x);
                }
            } else if( str[0] == 'd' ) {
                s.erase(x);
            } else {
               if( s.find(x) != s.end() ) {
                    cout << "Yes" << endl;
               } else {
                    cout << "No" << endl;
               }
            }
        }
        return 0;
    }
    

      

    彼时当年少,莫负好时光。
  • 相关阅读:
    轻松把你的项目升级到PWA
    聊聊React高阶组件(Higher-Order Components)
    java NIO系列教程2
    java NIO系列教程1
    个人笔记
    onclick时间加return和不加return的区别
    URL编码分析与乱码解决方案
    第九天 1-8 RHEL7软件包管理
    第八天 RHEL7.2 文件权限管理(第一部分)
    第七天 Linux用户管理、RHEL6.5及RHEL7.2 root密码破解、RHEL6.5安装vmware tools
  • 原文地址:https://www.cnblogs.com/l609929321/p/9525880.html
Copyright © 2011-2022 走看看