首页 > 其他分享 >代码模板存档

代码模板存档

时间:2022-09-30 14:00:20浏览次数:47  
标签:std return int 存档 代码 vector siz leader 模板

代码模板存档)

2022.9.30 增加并查集、埃氏筛、线性筛、快速幂、扩展欧几里得、求逆元


一般 C++ 比赛文件模板

#include <bits/stdc++.h>

using i64 = long long;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    

    return 0;
}

并查集

jls 的并查集模板

struct DSU{
    std::vector<int> p, siz;

    DSU(int n) : p(n), siz(n, 1) {std::iota(p.begin(), p.end(), 0); }

    int leader(int x) {
        if (x != p[x]) {
            p[x] = leader(p[x]);
        }
        return p[x];
    }

    void merge(int x, int y) {
        int px = leader(x);
        int py = leader(y);
        if (px != py) {
            siz[py] += siz[px];
            p[px] = py;
        }
    }

    bool same(int x, int y) {
        return leader(x) == leader(y);
    }

    int size(int x) {
        return siz[leader(x)];
    }
};

埃氏筛

std::vector<int> construct_plist(int mx) {
    std::vector<int> plist;
    std::vector<bool> fl(mx + 1, false);
    for(int i = 2; i <= mx; i++) {
        if(fl[i]) {
            continue;
        }
        plist.push_back(i);
        for(int j = i; j <= mx; j += i) {
            fl[j] = true;
        }
    }

    return plist;
}

线性筛

std::vector<int> conplist(int n) {
    std::vector<bool> f(n + 1, 0);
    std::vector<int> plist;
    for (int i = 2; i <= n; i++) {
        if (!f[i]) {
            plist.push_back(i);
        }
        for (int j = 0; plist[j] <= n / i; j++) {
            f[plist[j] * i] = 1;
            if (i % plist[j] == 0) {
                break;
            }
        }
    }

    return plist;
}

快速幂非递归版

int quick_pow(int a, int b) {
    int ans = 1;
    while (b != 0) {
        if (b % 2 == 1) {
            ans *= a;
        }
        a *= a;
        b >>= 1;
    }
    return ans;
}

扩展欧几里得

求形如 \(a \equiv 1 \ (mod \ m)\)

(待补充)

int exgcd(int a, int m, int& u, int& v) {
    if(m == 0) {
        u = 1; v = 0;
        return a;
    } else {
        int x1;
        int d = exgcd(m, a % m, x1, u);
        v = x1 - a / m * u;
        return d;
    }
}

求逆元(配合exgcd)

求 \(a\) 关于 \(p\) 的逆元,即求 \(a \equiv 1 \ (mod \ p)\) 下,\(a\) 的逆元

int inv(int a, int p) {
    int u, v;
    exgcd(a, p, u, v);
    return (u % p + p) % p;
}

标签:std,return,int,存档,代码,vector,siz,leader,模板
From: https://www.cnblogs.com/isrol/p/16744688.html

相关文章

  • 《代码大全》(2)
    本月我简单的阅读了《程序员修炼之道--从小工到专家》,给我留下印象比较深刻的是其中讲到的“破窗户理论”,一个小小的破窗户,如果有那么一段时间不修理,就会渐渐给居住的居民......
  • 代码大全2 阅读笔记01
    第七章:高质量的子程序1、为什么要创建子程序?      提高程序的可读性,减少以及隔离程序复杂度,提高代码复用率,在代码变更时减少带来的影响(功能变更,变更导致的测试),可......
  • 除了OA、ERP、表单生成器、协同办公,能够做整个应用的低代码平台有吗?
    其实OA、ERP等也是可以在低代码平台做的,只是能做这种定制的要求比较高,所以这种平台少且必须是原子级定制的。而大多数低代码平台只是基于定制好的模块来完成模块的拼接或者......
  • 低代码平台为何如此火热?
    省事,省时,省钱,谁不想呢?但如果低代码平台只是基于定制好的模块来完成模块的拼接或者调用预定义好的存储过程,看上去很美好,实质是一个大坑,毕竟后续的需求涉及新的模块、存储过......
  • 无代码开发和低代码开发有什么区别?
    换汤不换药!最关键的是平台内核机制!如果低代码平台只是基于定制好的模块来完成模块的拼接或者调用预定义好的存储过程,看上去很美好,实质是一个大坑,毕竟后续的需求涉及新的模......
  • 怎么选择软件开发工具?零代码创造工具有什么优势?
    借我借我一双亮眼吧,让我把这些平台彻底看个清清楚楚明明白白!如果低代码平台只是基于定制好的模块来完成模块的拼接或者调用预定义好的存储过程,看上去很美好,实质是一个大坑,......
  • 有哪些好用的低代码快速开发平台?
    如果低代码平台只是基于定制好的模块来完成模块的拼接或者调用预定义好的存储过程,看上去很美好,实质是一个大坑,毕竟后续的需求涉及新的模块、存储过程等还得仰仗平台供应商......
  • 《代码大全2》(1)
    《代码大全》看完前面觉得有很多值得回味的地方,而且每部分之后作者还推荐了不少经典书籍。本书的思想管理软件项目的本质是管理复杂性。代码承载的是人与人之间的交流。在......
  • 低代码开发创新企业应用构建模式,你知道多少?
    如果低代码平台只是基于定制好的模块来完成模块的拼接或者调用预定义好的存储过程,看上去很美好,实质是一个大坑,毕竟后续的需求涉及新的模块、存储过程等还得仰仗平台供应商......
  • 这么多低代码开发厂商,怎么选择?
    看你用来做什么,如果只是要求简单,也没必要太费神,而如果要用到复杂的应用,甚至ERP之类的,也在低代码平台做的,那能做这种定制的要求比较高,所以这种平台少且必须是原子级定制的。......