题目链接 题目 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。 国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子。 输入描述 只有一行,包含两个数N,K ( 1 ≤ N ≤ 9, 0 ≤ K ≤ N * N) 输出描述 方案数。 示例1 输入 3 2
B 清楚姐姐带带我 当数大于 1e9的时候就取模 //#define int ll const int N = 1e5+10,mod = 19980829; int n,m; void solve() { ll res = 0; bool flag = false; int n; cin >> n; for(int i = 1 ; i <= n ; i ++) { ll a, b; cin
【模板】插头dp 题目链接:luogu P5056 题目大意 有一个 n*m 的网格,每个格子要么必须铺线,要么必须不铺。 然后问你有多少个铺发使得形成一个闭合回路。 思路 快乐插头 DP 模板题。 首先默认都会插头 DP,其实不会也没啥,其实就是你压你当前处理的位置跟没处理的分界线(一般叫轮廓线)。 所
https://zhidao.baidu.com/question/367173891541492052.html 结果为C(N+K-1,K) 思想为上面的挨个放入。 或者 将每个箱子都先放入一个球,即N个箱子,放入N+K个小球,箱子非空,然后再使用隔板法,得到C(N+K-1,N-1)。 例题: https://atcoder.jp/contests/abc266/tasks/abc266_g 代码: #incl
#include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10, M = 2e5 + 10, INF = 0x3f3f3f3f; int n, m, f[N]; struct edge{ int f, t, l; edge(){} edge(int ff, int tt, int ll) { f = ff, t = tt, l = ll; } friend b
因为他我学了龟速乘 Millar-robin 米勒罗宾 这个小东西是用来素数判定的,且听我细细道来。 前置知识 肥妈小定理 又名费马小定理 : 当一个数 \(x\) 不是一个质数 \(p\) 的倍数时有: \[x^{p-1} \equiv 1 \pmod{p} \]证明: 对于一个序列 \[b = \left \{1,2,3....p-1\right \} \]令 \[
Dashboard - Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) - Codeforces B. Make Them Odd 题意: 一个数组,每次选择一个数,将数组中的这个数都减半,问多少次数组就所有数字都是奇数 题解:将最后变成的奇数相同的数组分成一组,然后答案加上最大的
Hacker 对模式串建立 SAM ,将匹配串的字符一个个走下去,没有该字符就向上跳 parent tree 上的父亲继续找,如此得到对于每个前缀 b1,i 的可最长匹配的后缀,加个线段树维护权值前缀和的最小值即可。 #include<bits/stdc++.h> #define IL inline #define LL long long using namespace st
「雅礼集训 2018 Day1」树 首先发现这个期望是诈骗,我们只需要求出\(g_i\)表示深度为\(i\)的树的个数然后带权除以总方案数即可。 树的题目容易想到一个子树一个子树抠出来,设\(f_{i,j}\)表示有\(i\)个点,深度为\(j\)的方案数,容易发现二号节点的父亲一定是\(1\),因此可以枚举二号节点
#include<bits/stdc++.h> using namespace std; const int N = 505, M = 100010, INF = 0x3f3f3f3f; int n, m, dis[N], backup[N], k; struct edge { int f, t, l; edge(){} edge(int ff, int tt, int ll) { f = ff, t = tt, l = ll; } }
1、下载插件 Eclipse快捷键(我以前用Eclipse习惯了,大家不需要) Premitter Vetur koroFileHeader 2、修改VSCode设置 3、粘贴下面的代码 { "workbench.iconTheme": "vscode-icons", "editor.fontSize": 18, "editor.fontFamily": "JetBrains M
记城市 \(i\) 的海拔高度为\(h_i\), \(i\) 和 \(j\) 之间的距离 \(d_{i,j}=|h_i-h_j|\)。 旅行过程中,两人轮流开车,第一天 \(A\) 开车,之后每天轮换一次。选择一个城市 \(s\) 作为起点,向编号大的一方行驶,并且最多行驶 \(x\) 公里就结束旅行。 \(B\) 总是沿着前进方向选择一个最近的
Counting Rectangles 思维 把所有的矩形左上角都叠在一起,就会发现是一个二维前缀和的求解问题:\(\sum_{i=h_s+1}^{h_b-1} \sum_{j=w_s+1}^{w_b-1} (i*j*cnt_{ij})\) 这个显然就是一个二维前缀和的问题,直接算就好了 #include <iostream> #include <cstdio> #include <string> #inclu
CF传送门 因为洛谷题库未更新,所以给出的题面都是CF的。 现场打真是太卡了(梯子挂了,codeforc.es也崩了),所以五六分钟才打开题目 \(qwq\) A. Spell Check 萌萌题,把字符串放桶里,判名字每个字母是否恰好出现一次即可。 \(9min\) \(AC\) \(qwq\) 都怪CF Code: #include<bits/stdc++.h> #d
给定 \(n\) 个点和 \(m\) 条边,起点 \(s\) ,每个点有颜色。给定多组 \([l,r]\) ,求最大走 \(l...r\) 边权所有可以走到的不同颜色数之和。(同一种颜色在不同区间内算多组)。 \(n,m\leq 5\times 10^5,q\leq 10^5,type\leq 600\) 。 将原图转换成最小生成树是等效的,因为最大值最小的瓶颈
写一种数据结构,支持: \(1\) \(l\) \(r\) \(x\) :将\([l,r]\) 区间所有数加上\(x\) \(2\) \(l\) \(r\) \(x\) :将\([l,r]\) 区间所有数改成\(x\) \(3\) \(l\) \(r\) \(x\) :输出将\([l,r]\) 区间从小到大排序后的第\(x\) 个数是的多少(即区间第\(x\) 小,数字大小相同算多次,保证 \(1\leq
给定一棵树,要求执行3种操作: 给树上某一结点涂色,从下一次操作起每一次向周围传染一个单位。 树上所有点变为正常 询问某个点是否被感染。 \(n,m\leq 10^5\)。 首先想到暴力做法,用栈维护现在被感染的节点以及感染时间,那么对于操作1,2都好解决,对于操作3需要遍历栈并求出是否有节点
求 \[2^{2^{2^{2^{2^{...}}}}}mod\,p \]\[p\leq 10^7 \] 显然硬干是不行的,那么考虑别的思路。设 \(f(p)\) 为原式模 \(p\) 的解,那么 \(f(p)=2^{f(\varphi(p))+\varphi(x)}\) ,递归可以求出上一项的值即可,边界是 \(\varphi(p)=1\) 时 \(f(p)=0\) ,需要预处理出 \(\varphi\) 的值。 #
求字符串的奇数长回文子串中前 \(k\) 长的大小之积 \(mod\) 19930726。 \(k\leq 10^{12},|S|\leq 10^6\)。 不插入#跑一遍马拉车得到长度为奇数的回文串,用数组 \(k\) 表示有 \(k[i]\) 种回文串长度为 \(i\) 的子串。由于长度为 \(i\) 的串一定是长度为 \(i-2\) 的串,所以用后缀和
ABC266 Ex - Snuke Panic (2D) 挺好的一道题(不过调了好久QAQ 方法一 比较暴力的做法。 首先,你容易想到一个 DP 状态:\(f(t,x,y)\) 表示在 \(t\) 时刻到达 \((x,y)\) 的最大收益。 转移为: \[f(t,x,y)=\max\{f(t',x',y')|t'\leq t,y'\leq y,|x-x'|+y-y'\leq t-t'\} \]后面
https://ac.nowcoder.com/acm/contest/39100 A-阿宁的柠檬 题目描述 阿宁喜欢吃柠檬。已知每个柠檬酸度可能是 1到 a,甜度可能是 0 到 b。 现在阿宁有 n 个柠檬,她要全部吃掉,会获得一定的快乐值。快乐值为每个柠檬的酸度和甜度总和。 阿宁最小的快乐值和最大的快乐值可能是多少?
D - Iroha and Haiku (New ABC Edition) 题意: 找一个最少含有三个点的区间,将区间分成三块,三块的和分别为p,q,r,问是否存在这样的区间 题解:先预处理一遍前缀和,和每一个前缀和出现的位置,然后从前往后遍历,每次遍历当前位置的前缀和,如果当前位置的前缀和>=(p+q+r),那么就有可能存在符
Erudite of words 组合数学 + 容斥 定义 \(F_i\):表示由 \(i\) 个字母组成的长度为 \(n\) 的单词数(每个字母必须在单词中出现) 显然答案就是 \(F_k * C_{m}^{k}\) 关于 \(F_i\) 的递推式: \[F_i = i^n - \sum_{j=1}^{k-1}(F_j) \]显然 \(i^n\) 代表 \(i\) 个字母随意摆放的情况,容斥地
B - Modulo Number (atcoder.jp) 移项之后发现就是带余除法的形式,直接取模就可以了。(某sb写了个exgcd) const int p=998244353,k=1; typedef long long ll; ll n; ll exgcd(int a,int b,ll &x,ll &y){ if(!b){ x=1; y=0; return a; } ll d=exgcd(b,a%b,y,x); y-=a/b*x; r
「学习笔记」字符串基础:Hash,KMP与Trie 点击查看目录 目录「学习笔记」字符串基础:Hash,KMP与TrieHash算法代码KMP算法前置知识:\(\text{Border}\)思路代码\(\text{KMP}\) 匹配思路代码Trie数据结构01-Trie代码练习题HashBovine Genomics思路代码[TJOI2018]碱基序列思路代码[CQOI201