随笔分类 - ACM集训
摘要:double a[maxn][maxn]; int n; void Gauss() { for (int i = 1; i <= n; i++) { int Max = i; for (int j = i + 1; j <= n; j++) { if (fabs(a[j][i]) > fabs(a[
阅读全文
摘要:#pragma warning(disable:4996) #include<iostream> #include<algorithm> #include<bitset> #include<tuple> #include<unordered_map> #include<fstream> #inclu
阅读全文
摘要:要掌握KMP ,重点掌握两点 1.Next数组的作用 2.Next数组的求法。 #pragma warning(disable:4996) #include<iostream> #include<algorithm> #include<bitset> //#include<unordered_map
阅读全文
摘要:Tire 是一种用于实现字符串快速检索的多叉树结构。Tire的每个节点都拥有若干个字符指针,若在插入或检索字符串时扫描到一个字符c,就沿着当前节点的c字符指针,走向该指针指向的方向。 基本操作: int trie[SIZE][26], tot = 1; bool End[SIZE]; void in
阅读全文
摘要:字符串Hash可以把一个长度任意的字符串映射成一个非负整数,并且其冲突概率几乎为0 取一固定值P,把字符串看作P进制数,并分配一个大于0的值,代表每种字符。一般来说,分配的数都远小于P。例如 a = 1, b=2 , z=26 取一个固定值M,求出该P进制对M的余数,作为Hash值。 一般来说,P取
阅读全文
摘要:1.提示给出 关系可能重复 故需要引入Hash判重 2.对于给定关系<a,b> 显然我们可以把 a+1 ~b-1 的牛整体减一来达到 ,所以这里可以利用到差分关系 ,最后利用差分的前缀和即实际高度即可 unordered_map<int, int> mp; int c[maxn]; int main
阅读全文
摘要:此题重点在于区间加/减 ,且最终序列的特征是差值均为0,对一个区间加不影响中间的差值 于是构差分数组,有: 为了使得最终差分数组均为0(除了d[1]) ,我们应该贪心地选择[l,r] ,这样一来,算出负数的和的绝对值,正数的和的绝对值,取最小值再加上绝对值的差的绝对值,就是需要操作的最少次数。(贪心
阅读全文
摘要:给定整数 n,求它的所有原根。 为了减小你的输出量,给出输出参数 dd,设 nn 的所有原根有 cc 个,从小到大分别为 g_1,\ldots,g_cg1,…,gc,你只需要依次输出 int phi[maxn]; int prime[maxn]; int vis[maxn]; int rt[ma
阅读全文
摘要:Nim游戏 HDU1846 若各堆石子异或和为不为零,则先手胜 ,后手当且仅当异或和为零时取胜 此题问要想先手取胜第一步的取法,考虑到上述引理,只需遍历一遍石子找到异或和的最高位匹配的个数。 int a[105]; int main() { int m; while (scanf("%d", &m)
阅读全文
摘要:用于解决大部分区间离线问题的离线算法 主要思想是分块 时间复杂度O(n sqrt(n)) 对于当前区间 [L,R] 1.加上当前区间左边一格的贡献,Add(--L) 2.加上当前区间右边一格的贡献 Add(++R) 3.减去当前区间最左一格的贡献 Sub(L++) 4.减去当前区间最右一格的贡献 S
阅读全文
摘要:ll f(ll a,ll b,ll c,ll n) ///用于求解$Sigma_{i=0}^{n} floor((a*i+b)/c)$ { ll m = (a*n+b)/c; if(n==0||m==0) return (b/c); if(n==1) return ((b/c)+((a+b)/c))
阅读全文
摘要:高斯-约旦消元法 int n; double a[maxn][maxn]; void Gauss() { scanf("%d", &n); for (int i = 1; i <=n; i++) { for (int j = 1; j <=n + 1; j++) { scanf("%lf", &a[
阅读全文
摘要:莫比乌斯函数 求单个莫比乌斯函数 O(sqrt(n)) ll getu(ll x) { ll v = 1; for (int i = 2; i * i <= x; i++) { if (x % i == 0) { v = -v, x /= i; if (x % i == 0) return 0; }
阅读全文
摘要:A. People Couting 给出一个人的固定形状(3*3)的方框内,有许多人合影,最后拍的照不一定完整但每个人至少会出现一部分 ,问图中有几人 有点思维题的意思,最后发现只要遍历整个图判断满足条件的坐标有任何一个人的“部件”答案就能++,果然这种题一般都有比较巧妙的方法 反思:有时候不要把问
阅读全文
摘要:A.爆炸题 图论,最短路,思维 给出一个图,从1点开始每秒为1米的速度火焰扩展,如果遇到大于一个火焰相遇就会爆炸,问最终爆炸的个数 容易得出以下规律:如果在某个点爆炸,那么这个点存在大于1的入度使得最短路相等 如果在边上爆炸,那么这条边不在最短路上 #include<iostream> #inclu
阅读全文
摘要:A.给出一个字符串,求出连续的权值递增和,断开以后权值重新计数,水题 #include<iostream> #include<string> #include<cmath> #include<cstring> #include<vector> #include<map> #include<set>
阅读全文
摘要:long long f[25]; int main() { f[0] = 1; cin >> n; for (int i = 1; i <= n; i++) f[i] = f[i - 1] * (4 * i - 2) / (i + 1); //这里用的是常见公式2 cout << f[n] << e
阅读全文
摘要:洛谷P1495 https://www.luogu.com.cn/problem/P1495 #include<iostream> #include<string> #include<cmath> #include<cstring> #include<vector> #include<map> #i
阅读全文
摘要:勘误: 多重集的组合 (1) (2) 答案应为C(n+r-1,r-1)
阅读全文
摘要:#include<iostream> #include<string> #include<cmath> #include<cstring> #include<vector> #include<map> #include<set> #include<algorithm> #include<queue>
阅读全文

浙公网安备 33010602011771号