政务桌面应用系统开发提升政府服务效率的关键所在
711
2022-11-17
ACM模板
构建一下自己的模板吧,不然不常用的又忘了。
树状数组
struct BIT {///树状数组 ll c[maxn]; void add(int x,ll d){ while(x<=n+1){ c[x]+=d; c[x]%=MOD; x+=lowbit(x); } } ll query(int x){ ll ans=0; while(x){ ans+=c[x]; ans%=MOD; x-=lowbit(x); } return ans; }}bit;
字典树
struct Trie { //定义名为 Trie 的结构体类型 int sz; //节点编号 Trie() { sz = 1; //初始化 memset(ch[0], 0, sizeof(ch[0])); } int idx(char c) { return c - 'a'; //返回字母 c 的序值 } void insert(char *s) { //构造单词*s 对应的 Trie 树 int u = 0, n = strlen(s); //根节点编号为 0,计算字符串 s 的长度 n for(int i = 0; i < n; i++) { //依次插入字串的每一个字母 int c = idx(s[i]); //计算第 i 个字母的序值 if(!ch[u][c]) { //若节点 u 编号为 c 的子节点空 memset(ch[sz], 0, sizeof(ch[sz])); //节点 sz 为叶节点 val[sz] = 0; //sz 的访问次数为 0 ch[u][c] = sz++; //sz 设为节点 u 编号为 c 的子节点,设 下一个节点编号 sz++ } u = ch[u][c]; //取节点 u 序值为 c 的子节点编号,该节点的访问次数+1 val[u]++; } } void query(char *s) { //计算和输出单词*s 的最短前缀 int u = 0, n = strlen(s); //从根出发,计算单词*s 的长度 for(int i = 0; i < n; i++) { //依次搜索*s 的每个字母 putchar(s[i]); //第 i 个字母作为前缀字符输出 int c = idx(s[i]); //计算第 i 个字母的序数值 c if(val[ch[u][c]] == 1) return ; //若 u 的序数值 c 的子节点仅被访问一次,则退出 u = ch[u][c]; //继续沿序数值 c 的子节点搜索下去 } }};
组合数
ll fac[maxn];void init(){ fac[0] = 1; for(int i = 1; i < maxn; i++) { fac[i] = fac[i - 1] * i % mod; }}ll infac(ll x){ return qpow(x, mod - 2, mod);}ll C(ll n, ll m){ if(n < m) return 0; return fac[n] * infac(fac[m]) % mod * infac(fac[n - m]) % mod;}
素数筛
int cnt;int prime[maxn];bool isprime[maxn];void Prime(){ for(int i=2;i FFT #include
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~