首页 > 其他分享 >「AcWing学习记录」Trie

「AcWing学习记录」Trie

时间:2023-02-25 12:45:39浏览次数:45  
标签:记录 Trie res ++ son char int str AcWing

Trie:高效地存储和查找字符串集合的数据结构。

AcWing 835. Trie字符串统计

原题链接

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1e5 + 10;

int son[N][26], cnt[N], idx;
char str[N];

void insert(char str[])
{
    int p = 0;
    for(int i = 0; str[i]; i++)
    {
        int u = str[i] - 'a';
        if(!son[p][u]) son[p][u] = ++idx;
        p = son[p][u];
    }

    cnt[p]++;
}

int query(char str[])
{
    int p = 0;
    for(int i = 0; str[i]; i++)
    {
        int u = str[i] - 'a';
        if(!son[p][u]) return 0;
        p = son[p][u];
    }

    return cnt[p];
}

int main()
{
    int n;
    cin >> n;
    while(n--)
    {
        char op[2];
        scanf("%s%s", op, str);
        if(op[0] == 'I') insert(str);
        else printf("%d\n", query(str));
    }

    return 0;
}

AcWing 143. 最大异或对

原题链接

1.暴力算法怎么做

res = 0;
for(int i = 0; i < n; i++)
    for(int j = 0; j < i; j++)
        res = max(res, a[i] ^ a[j]);

2.如何去优化

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1e5 + 10, M = 31 * N;

int n;
int a[N];
int son[M][2], idx;

void insert(int x)
{
    int p = 0;
    for(int i = 30; i >= 0; i--)
    {
        int u = x >> i & 1;
        if(!son[p][u]) son[p][u] = ++idx;
        p = son[p][u];
    }
}

int query(int x)
{
    int p = 0, res = 0;
    for(int i = 30; i >= 0; i--)
    {
        int u = x >> i & 1;
        if(son[p][!u])
        {
            p = son[p][!u];
            res = res * 2 + !u;
        }
        else
        {
            p = son[p][u];
            res = res * 2 + u;
        }
    }

    return res;
}

int main()
{
    cin >> n;
    for(int i = 0; i < n; i++) scanf("%d", a + i);

    int res = 0;

    for(int i = 0; i < n; i++)
    {
        insert(a[i]);
        int t = query(a[i]);
        res = max(res, a[i] ^ t);
    }

    cout << res << endl;

    return 0;
}

标签:记录,Trie,res,++,son,char,int,str,AcWing
From: https://www.cnblogs.com/YuukiAsuna/p/17153926.html

相关文章

  • 记录Nginx配置
    #ProxytotheAirsonicserverlocation/{proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarde......
  • SmallDesktopDisplay V1.4.3 学习记录 程序基本流程
    SmallDesktopDisplayV1.4.3学习记录声明:原作者:Misaka;修改:微车游;再次修改:丘山鹤项目地址:https://github.com/SmallDesktopDisplay-team/SmallDesktopDisplay本文引用......
  • ACwing——我在哪?
    题目描述农夫约翰出门沿着马路散步,但是他现在发现自己可能迷路了!沿路有一排共N个农场。不幸的是农场并没有编号,这使得约翰难以分辨他在这条路上所处的位置。然而,每个......
  • 「AcWing学习记录」KMP
    AcWing831.KMP字符串原题链接1.暴力算法怎么做chars[N],p[M];for(inti=1;i+m-1<=n;i++){boolflag=true;for(intj=1;j<=m;j++)......
  • Acwing 97
    Acwing97.约数之和题意求\(a^b\)的约数之和思路假设不考虑次方,只求a的约数之和,要怎么求呢?当遇到一个数b能被a整除时,假设当前答案为\(ans\),则应再加上\(ans*b\)。a......
  • 每日记录2023.02.24(五)
    今天进一步学习了androidstudio的使用。ProgressBar,可以完成一个进度条,点击按钮控制进度条的旋转;也可以设置成长条的进度条,每按一下加载多少都可以控制。  AlertD......
  • Acwing 22
    classSolution{public:intfunc(vector<int>&nums,intbegin,intend){while(begin+1<end){intmid=begin+((end-begin)>>1);......
  • Vue3中url传递参数通过全局前置守卫接收参数,利用store存储并控制DOM显示或隐藏(记录一
    业务场景:根据路由传递的标志eg:hidden来控制侧边栏和横条显示或隐藏核心代码:<a-layout-headerclass="header"v-if="!(parseInt(hidden)===1?true:false)">......
  • Spring 保存带Array字段的记录到PostgreSQL
    前言本文继续学习PostgreSQL,看到PostgreSQL有个Array字段,感觉可以用来存储某种表,比如股票每天的价格,我们称为market_price表,先来看下最开始market_price表的定义cre......
  • 记录因net.ipv4.tcp_tw_recycle=1内核参数导致ssh登录不上的问题
    机器配置了 net.ipv4.tcp_tw_recycle=1 ,表示开启TCP连接中TIME-WAITsockets的快速回收。这种配置会导致一个问题,当服务是一个网关类的应用的时候且访问量很大的时候容......