随笔分类 - ACM题解
摘要:发此随笔以警示自己不要乱实现。 枚举因子的时候多加留心,实现能力还是太差了。 ll get_phi(ll n) { ll m = ll(sqrt(n + 0.5)); ll ans = n; for (int i = 2; i <= m; i++) { if (n % i == 0) { ans =
阅读全文
摘要:给定n个规则 每个规则 x y z z = 1表示 ax = ay ,z = 0 表示 ax ≠ ay 。 若最后是矛盾的输出NO,否则YES 初开题面是裸的并查集。 再看体面发现 x y的范围 1e9,而n只有1e6,就是说虽然xy很大但是数最多只有1e6个,考虑离散化。 离散化套路:排序,unq
阅读全文
摘要:贝西有权选择让哪些奶牛参加展览。由于负的智商或情商会造成负面效果,所以贝西不希望出展奶牛的智商之和小于零,或情商之和小于零。 满足这两个条件下,她希望出展奶牛的智商与情商之和越大越好,请帮助贝西求出这个最大值。 • 第一行:单个整数N,1 ≤ N ≤ 400 • 第二行到第N + 1 行:第i +
阅读全文
摘要:据传这类问题叫做有依赖性的背包问题:选某个物品的同时必须连带选其他物品 容易想到其实是决策发生了变化: 可以选啥都不选 可以只选主件 可以选主件+一个附件 可以选主件+两个附件 其他和01背包一样 struct Bag { int w; int val; Bag(int x = 0,int y =
阅读全文
摘要:混合背包是指很多种背包一起做。此题属于多重背包的模板题 思想是统统转化为01背包 题目中有01背包(p = 1),完全背包(p = 0) , 多重哦背包 (p = k) 完全背包,只需将p = t / w 。 多重背包,只需进行二进制拆分 注意数组开大 int readint() { int x =
阅读全文
摘要:给定一个长度为n的正数组,在这个数组上跑,每跑到一个点获得该点的分数。 有k次行动的机会,有最多z次返回的机会。且返回不得连续返回两次。 k <= n - 1, 1 <= z <= min(5,k) 首先此题背景和《乌龟棋》很相似,其次z的范围很小,可以考虑dp dp[k][z]表示当前走了k步,返
阅读全文
摘要:给定一个字符串,求字符串的每个循环串的长度和循环节的大小 注意初始化Next 若 i 是 i - Next[i] 的倍数,表面这一段是循环串,循环节的长度是i - Next[i]。这是由于Next数组表示最长公共前后缀,若是倍数关系,表面前面的一段恰好是重复的。 char s2[maxn]; int
阅读全文
摘要:第i个位置的分数是 a[i]。 每次可使用一张卡牌移动一定距离,每到一个位置可以加一次分数 问到终点的最大分数。 由于每张卡牌上限不超过40,考虑将状态设置为当前该种卡使用的卡牌数。 DP[a][b][c][d]表示使用a张1号牌,b张2号牌,c张3号牌,d张4号牌的情况下能够得到的最大分数。 考虑
阅读全文
摘要:给定一个素数p ,问是否存在两个数的里方差就是p p<=1e12 经过简单的数学推导,可以很快想到只要 方程 3 * b *b + 3 * b + 1 - p = 0 关于b有解即可。 简单的想法就是二分 但是问题是b*b要爆long long,咋办呢? java呗 import java.math
阅读全文
摘要:第一次使用快速乘,原来是这样的。 注意Put快速输出要改一下类型,(ll),注意快速输出后面要手打换行。 注意熟悉快速幂配合快速乘的模板。 #pragma warning(disable:4996) #include<iostream> #include<algorithm> #include<bi
阅读全文
摘要:在一个 n*n 的平面上,在每一行中有一条线段,第 i 行的线段的左端点是(i, L(i)),右端点是(i, R(i)),其中 1 ≤ L(i) ≤ R(i) ≤ n。 你从(1, 1)点出发,要求沿途走过所有的线段,最终到达(n, n)点,且所走的路程长度要尽量短。 更具体一些说,你在任何时候只能
阅读全文
摘要:BSGS存在的目的是求中x的解,BSGS算法要求A与C互质,且C为质数。 #pragma warning(disable:4996) #include<iostream> #include<algorithm> #include<bitset> #include<tuple> #include<un
阅读全文
摘要:很容易想到考虑每个质因子对全局的贡献。 思路就是考虑一边。 每个质因可能因为前或后已经出现过质因子了难以计算。不妨对每个质因子采用如下策略,每个质因子的管辖范围是当前位置到前一个质因子位置这段区间,以及到最后的区间。可以想到这样的计数方法是不会重复的。 关于实现:枚举质因子的时候注意循环条件,我一开
阅读全文
摘要:随机在[a,b] 选取一个数,随即在[c,d]选取一个数 问 x + y 取模 p 同余 n 的概率 其实就是计数问题。关键在于如何计数可以不重不漏。 麻烦点在于分类讨论。对于这样的区间问题,先简化为0 , x 的区间。 这里用到容斥原理,第一次做这样的题,不是很容易想到。 分类讨论相对来说感觉还算
阅读全文
摘要:关于 k1 k2 互质的问题,可以自己手动证明一下,需要一点数学直觉。 #pragma warning(disable:4996) #include<iostream> #include<algorithm> #include<bitset> #include<tuple> #include<uno
阅读全文
摘要:给定n 问 k ^ k <= n的最大k 注意到n的范围才1e18,考虑枚举k就好了 不用想复杂 import java.math.BigInteger; import java.io.BufferedReader; import java.io.IOException; import java.i
阅读全文
摘要:https://www.luogu.com.cn/problem/P1095 状态dp[i]表示i时刻只用魔法的最远距离。 对于跑步,只需要利用处理好的dp维护一下。 其正确性基于贪心策略,长远的考虑,一定是用魔法的距离比跑步好,但是在个别情况,休息的过程时就有可能不如跑步,因此加入跑步来动态维护,
阅读全文
摘要:莫比乌斯反演经典题。 借鉴大佬的推导。 int prime[maxn], prime_tot; int is_prime[maxn]; int mu[maxn]; ll sum[maxn]; void pre_calc(int lim) { mu[1] = 1; for (int i = 2; i
阅读全文
摘要:对于维护a ,c数组有两种方法: 1.对于每个修改,暴力修改c 2.对于每个查询,暴力查找a 第一种方法是for倍数,最坏复杂度可能达到On,第二种则是sqrt(n) 因此普遍情况下选择第二种,但是题给的x是随机的,期望情况下1只要logn,大大节省了时间。 故采用方法1. 考虑到a[x]的变化如何
阅读全文
摘要:问(1+sqrt(2)) ^n 能否分解成 sqrt(m) +sqrt(m-1)的形式 如果可以 输出 m%1e9+7 否则 输出no 打表找规律。 得到 ai = 6 * a[i - 1] - a[i - 2] - 2 就硬找呗?? 然后矩阵快速幂。注意负数取模的细节 值得一提的是,可以证明 #p
阅读全文

浙公网安备 33010602011771号