首页 > 其他分享 >SC的个人板子库

SC的个人板子库

时间:2024-02-29 13:03:05浏览次数:23  
标签:个人 int tr tot 板子 模板 SC inline AwA

声明

Sugar_Cube的博客园主页

宇宙安全声明

本文包含了笔者常用的OI算法、数据结构的模板
不保证正确,但能通过相应的模板题(如果有会挂出)
如有错误请在评论区指出(虽然大抵没人看就是了)
码风是笔者的个人习惯(能看懂就好喵),部分代码可能会省略快读Read()
持续更新
咕咕咕

输入输出优化

快读

inline int Read() {
        int res = 0;
        bool flag = false;
        int c = getchar();
        //~c防止EOF读到-1而卡死循环,一般情况可省略
        while ((c < '0' || c > '9') && ~c) {
            flag |= c == '-';
            c = getchar();
        }
        while (c >= '0' && c <= '9') {
            res = (res << 1) + (res << 3) + (c ^ 48);
            c = getchar();
        }
        return flag ? -res : res;
}

数据结构

图论

树上问题

字符串

KMP

Luogu P3375 【模板】KMP

constexpr int AwA = 1e6 + 10;

int n, m;
char s1[AwA], s2[AwA];
int p[AwA];

inline void Pre() {
    p[1] = 0;
    for (int i = 2, j = 0; i <= m; i++) {
        while (j && s2[j + 1] != s2[i]) j = p[j];
        if (s2[j + 1] == s2[i]) j++;
        p[i] = j;
    }
}

inline void Kmp() {
    for (int i = 1, j = 0; i <= n; i++) {
        while (j && s2[j + 1] != s1[i]) j = p[j];
        if (s2[j + 1] == s1[i]) j++;
        if (j == m) printf("%d\n", i - m + 1), j = p[j];
    }
}

int main() {
    scanf("%s%s", s1 + 1, s2 + 1);
    n = int(strlen(s1 + 1)), m = int(strlen(s2 + 1));

    Pre();
    Kmp();

    for (int i = 1; i <= m; i++) printf("%d ", p[i]);
    putchar('\n');
    return 0;
}

Trie树

Luogu P8306 【模板】字典树

constexpr int AwA = 3e6 + 10;

struct Node {
    int ch[62];
    int cnt;
} tr[AwA];

int tot;
char s[AwA];

inline int CharToInt(char c) {
    if (c <= '9') return c - '0' + 52;
    if (c >= 'a') return c - 'a' + 26;
    return c - 'A';
}

inline int NewNode() {
    tot++;
    memset(tr[tot].ch, 0, sizeof(int) * 62);
    tr[tot].cnt = 0;
    return tot;
}

inline void Insert() {
    int u = 1, len = int(strlen(s + 1));
    for (int i = 1; i <= len; i++) {
        int c = CharToInt(s[i]);
        if (!tr[u].ch[c]) tr[u].ch[c] = NewNode();
        u = tr[u].ch[c];
        tr[u].cnt++;
    }
}

int main() {
    int T = Read();
    while (T--) {
        tot = 0;
        NewNode();

        int n = Read(), m = Read();
        for (int i = 1; i <= n; i++) {
            scanf("%s", s + 1);
            Insert();
        }

        while (m--) {
            scanf("%s", s + 1);
            int u = 1, len = int(strlen(s + 1));
            for (int i = 1; i <= len && u; i++) {
                int c = CharToInt(s[i]);
                u = tr[u].ch[c];
            }
            printf("%d\n", tr[u].cnt);
        }
    }

    return 0;
}

数学

计算几何

标签:个人,int,tr,tot,板子,模板,SC,inline,AwA
From: https://www.cnblogs.com/Sugar-Cube/p/18043381

相关文章

  • javascript中的var,let,const区别
    const:这个最简单,只需记住是声明的常量,定义的时候必须声明const的具体值,且之后不允许改变const的值 var和let区别1、由于js引擎存在预解析,会把var变量名进行提升对于var来说是这样执行的varm;console.log(m);m=10;let不存在变量提升,会直接报错   2、var是全局......
  • 文献笔记:LINE: Large-scale Information Network Embedding
    https://arxiv.org/pdf/1503.03578v1.pdf本文研究了将非常大的信息网络嵌入到低维向量空间的问题,这在可视化、节点分类和链路预测等许多任务中都很有用。大多数现有的图形嵌入方法无法扩展到通常包含数百万个节点的现实世界信息网络。在本文中,我们提出了一种名为“LINE”的新型网......
  • 如何使用 vscode 搭建 Django Restful API 开发环境 All In One
    如何使用vscode搭建DjangoRestfulAPI开发环境AllInOnevscode+Django(Python)demos(......
  • 使用vscode进行markdown编辑
    使用vscode进行markdown编辑从官网下载vscode下载地址如果下载的是安装程序,在安装过程中请勾选右键用vscode打开文件、文件夹选项,这样方便以后直接对文件夹和文件进行使用。因为我这里下载的是压缩包,不用安装直接用解压后文件夹中的Code.exe,导致对文件或文件夹右键时没有用vs......
  • 记录 Ubuntu20.04 配置 vscode/gcc/g++ 和 java17
    换源问题在网上找的教程,基本都是安装好Ubuntu后立刻更换软件下载源,但20.04版本我换源之后非常慢,并且后续安装软件时出现依赖问题无法解决等等,我试了清华源和自动选择最佳服务器都不行,最后只能重装。vscode参考:Ubuntu20.04下安装VSCode(配置C/C++开发环境)建议用sudosnapinstal......
  • [THUSCH2017] 大魔法师
    THUSCH2017]大魔法师题目描述大魔法师小L制作了$n$个魔力水晶球,每个水晶球有水、火、土三个属性的能量值。小L把这$n$个水晶球在地上从前向后排成一行,然后开始今天的魔法表演。我们用$A_i,B_i,C_i$分别表示从前向后第$i$个水晶球(下标从$1$开始)的水、火、土的能......
  • 24-2-28 个人赛
    A-GrandmaLauraandApples难度:⭐⭐(⭐)题目大意小莫在市集卖苹果,苹果的价格是p(p一定是偶数);现在有n个顾客前来买苹果,并且每次会买当前苹果数量的一半,如果当前苹果数量是奇数,那么小莫会再赠送顾客半个苹果;给出的n组输入,如果是"half",则说明小莫没有赠......
  • 第十四届蓝桥杯个人题解
    a幸运的数主要是思路 遍历1-100000000每一层循环,首先将其每一位分到数组里,并记录位数,如果是偶数位再接着往下,比较前半和后半是否相等:通过加减最后结果是否为零来判断intmain(){  intnum=0;  for(inti=1;i<100000000;i++)  {    ints[9]={0};......
  • javaweb02-JavaScript&vue
    JavaScript控制网页行为js引入方式内部脚本:script标签外部脚本:js文件js基础语法书写语法区分大小写每行结尾分号可有可无,建议写上输出语句警告框window.alerthtml输出document.write浏览器控制台console.log变量用var关键字声明变量JavaScript是一......
  • c# 4.8 实现Windows 定时任务计划(Task Scheduler)
    分享一个我自己写的 Windows定时任务计划(TaskScheduler)动态创建代码,没做太多封装,留个实现笔记首先封装一个简单配置项的类publicclassTaskSchedulerConfig{///<summary>///引用程序路径///</summary>publicstringApplicationPath{get;set;......