摘要:
题意: 给定一个序列ai,问序列中其他数中有多少个数是它的约数 思路: 暴力求法会超时。O(n²) 最优解:先储存每个数的个数,遍历x,每个x的倍数加上x的个数 注:最后每个数的答案要-1(减去本身) Code: #pragma GCC optimize(3) #pragma GCC optimiz 阅读全文
摘要:
题意: 给定n个数,删掉最少的数使剩余所有数的最大公约数比删除前所有数的最大公约数大 思路: 先算出所有数的最大公约数g,并将所有数 / g,这时序列内全部数的最大公约数为1,这时我们只要找到序列中每个质数的倍数最多有多少个(设有m个)。 如果全部数为1,输出-1。否则,输出n - m。 注意:直接 阅读全文
摘要:
题意: 给定一个奇数n,求k(k <= 3)个质数相加等于n 思路: 哥德巴赫猜想:任一>2的偶数都可以写成两个质数的和 因此可得,如果n是质数,则n就由他本身得到 如果n不是质数,就利用哥德巴赫猜想,n-=3,此时n为偶数,再由两个质数相加得到 Code: #pragma GCC optimize 阅读全文
摘要:
题意: 给定a和m,要求计算有多少个x(0 ≤ x < m),使 gcd(a, m) = gcd(a + x, m) 思路: 设g = gcd(a, m),gcd(a / g, m / g) = 1,令m' = m / g, a' = a / g,x' = x / g,则[a', a' + m') 阅读全文
摘要:
思路: 化简 a/b ,g = gcd(a, b)。分情况讨论: 1. b / g != b ,则由(a + b) / b - 1= a / b可推出,c = (a + b) / g, d = b / g, e = 1, f = 1 2.b / g == b 即 g == 1,则a与b互质。此时可推 阅读全文
摘要:
思路: 先求出二维前缀和,再用差分枚举每个点的值 Code: #pragma GCC optimize(3) #pragma GCC optimize(2) #include <map> #include <set> #include <array> #include <queue> #includ 阅读全文
摘要:
题意: 在{1,2,3,...,n}中找到两个没有交集的序列使得gcd(ai, bi)>1,即找到ai和bi两两配对,使得他们不互质 思路: 显而易见,> n/2的素数是不能配对的。我们可以先把1~n的素数筛出来,从大到小枚举每个素数p(从小到大会漏)。 对于每个素数p,2p,3p,...... , 阅读全文
摘要:
思路: 最后推出公式,发现只要用高斯消元求出矩阵A的逆即可 Code: #pragma GCC optimize(3) #pragma GCC optimize(2) #include <map> #include <set> #include <array> #include <queue> #i 阅读全文
摘要:
题意:给定一个字符串,根据题目要求将每个后缀的b函数进行排序,从小到大输出对应后缀的起始位 思路:比赛的时候没推出结论。引用题解结论,定义$c[i] = j - i$,$j$为索引$i$后面最近的索引使得$s[i] == s[j]$,就相当于逆序求出$c$函数。这时得到的数组就是后缀排序就是实际字符 阅读全文
摘要:
题意: 给定序列长度n,已知原排列为${1, 2, 3, 4,... ,n}$,将它置换$k$次后得到序列$a$,问将它置换一次的序列是什么 思路: 首先找出序列中所有轮换,每一个轮换即为一个环,长度记为$len$。显而易见$A$序列为环置换$k % len$次的结果,而最终答案为每个环置换一次的结 阅读全文