zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 23 E. Choosing The Commander Trie

    链接:

    http://codeforces.com/contest/817/problem/E

    题意:

    3种操作:

    1 插入一个数

    2 删除一个数

    3 给出一个数pi和l,询问有多少个数pj满足pi^pj<l

    题解:

    把每个数用bitset变成字符串,然后建字典树,询问的时候当碰到 l 的某一位为1的某一位为1的时候,就更新结果,然后继续搜索

    代码:

    31 int Trie[MAXN][2], val[MAXN];
    32 int sz = 1;
    33 
    34 void insert(string s, int value) {
    35     int now = 1;
    36     rep(i, 0, s.length()) {
    37         int x = s[i] - '0';
    38         if (!Trie[now][x]) Trie[now][x] = ++sz;
    39         now = Trie[now][x];
    40         val[now] += value;
    41     }
    42 }
    43 
    44 int query(string s, string t) {
    45     int now = 1, ret = 0;
    46     rep(i, 0, s.length()) {
    47         int a = s[i] - '0';
    48         int b = t[i] - '0';
    49         if (b) ret += val[Trie[now][a]];
    50         now = Trie[now][a^b];
    51     }
    52     return ret;
    53 }
    54 
    55 int main() {
    56     ios::sync_with_stdio(false), cin.tie(0);
    57     int q;
    58     cin >> q;
    59     while(q--) {
    60         int k, p, l;
    61         cin >> k >> p;
    62         if (k == 1) {
    63             string s = bitset<30>(p).to_string();
    64             insert(s, 1);
    65         }
    66         else if (k == 2) {
    67             string s = bitset<30>(p).to_string();
    68             insert(s, -1);
    69         }
    70         else {
    71             cin >> l;
    72             string s = bitset<30>(p).to_string();
    73             string t = bitset<30>(l).to_string();
    74             cout << query(s, t) << endl;
    75         }
    76     }
    77     return 0;
    78 }
  • 相关阅读:
    VS Code 调试报错
    Nginx反向代理设置
    Nginx 的配置文件
    Nginx 的常用的命令
    CentOS7安装Nginx
    Docker配置
    Centos7 安装MySQL 5.7
    限制Redis使用的最大内存
    C#操作Redis
    Font Awesome 字体图标
  • 原文地址:https://www.cnblogs.com/baocong/p/7366765.html
Copyright © 2011-2022 走看看