51nod挑的部分5级题
最近心情不好所以写代码来获得快落
4级题有点难做?然后就开始挑简单的5级题开始写
然后准备记录一些自己没有做出来
参考讨论区或者博客才做出来的题目
这个题参考了讨论区
令 t = n!
1/t = 1/x + 1/y , 0 < x <= y 的正整数解计数, n <= 1e6
考虑对式子进行变换
1/t = (x + y) / xy
xy = t * (x + y)
我们这时候应该有一个反应,配方有
(x - t) * (y - t) = t * t
所以考虑统计 t * t 的因子数就可以了
分解质因数即可
n, m, k = int(input()), 1, 1000000007
v = [0 for i in range(n + 1)]
p = [0 for i in range(n + 1)]
for i in range(2, n + 1):
if not v[i]:
p[0] += 1
p[p[0]] = i
t, j = 1, i
while j <= n:
t += n // j * 2
j *= i
m = m * t % k
for j in range(1, p[0] + 1):
if i * p[j] > n:
break
v[i * p[j]] = 1
if i % p[j] == 0:
break
print ((m + 1) * pow(2, k - 2, k) % k)
这个题参考了博客
考虑 i 存在于原集合的条件
假设 i 的倍数 s = {a * i, b * i, c * i ... } 存在于输入给定的集合中
那么我们知道 d = gcd(a, b),d * i 肯定是存在于原集合中的
那么必然存在 e = gcd(c, d),e * i 也存在于原集合中
即 gcd(a, b, c ...) * i 必然存在于原集合中
因为 i 要存在于原集合中只能依靠 s 中的元素
又有gcd(s) >= 1 * i
所以当且仅当 gcd(s) == i 的时候
才有 i 存在于原集合
枚举 i 即可
#include <bits/stdc++.h> using namespace std; const int N = 1e6 + ; int n, m, k, b[N]; int main() {
ios::sync_with_stdio(false);
cin >> n;
for (int x, i = ; i <= n; i ++) {
cin >> x, k = max(x, k);
if (!b[x]) b[x] = , m ++;
}
for (int i = ; i <= k; i ++)
if (!b[i]) {
int t = ;
for (int j = i << ; j <= k; j += i)
if (b[j])
t = __gcd(t, j);
if (t == i) m ++;
}
cout << m;
return ;
}
傻屌题目,考虑a[x] +y
那么对b的x, 2x,3x..产生贡献
那么对c的kx,容易发现贡献次数为f(k),f(k)为k的因数个数
考虑到x是随机的,所以采用每次更新的时候O(n / x)更新
查询O(1)回答的话,期望每次更新次数是O(logn)的,成了
垃圾题目,c++ 提交的话,要开快读和快速输出...
visual c++提交的话,直接scanf + printf就成了...
#include <stdio.h> const int N = 1e6 + ; int n, m, a[N]; long long b[N]; int main() {
int op, x, y;
scanf("%d %d", &n, &m);
for (int i = ; i <= n; i ++)
for (int j = i; j <= n; j += i)
a[j] += ;
while (m --) {
scanf("%d %d", &op, &x);
if (op == ) {
scanf("%d", &y);
for (int i = , j = x; j <= n; i ++, j += x)
b[j] += y * a[i];
}
else printf("%lld\n", b[x]);
}
return ;
}
51nod挑的部分5级题的更多相关文章
- 51nod图论题解(4级,5级算法题)
51nod图论题解(4级,5级算法题) 1805 小树 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 她发现她的树的点上都有一个标号(从1到n),这些树都在空 ...
- 51nod 1353 树 | 树形DP经典题!
51nod 1353 树 | 树形DP好题! 题面 切断一棵树的任意条边,这棵树会变成一棵森林. 现要求森林中每棵树的节点个数不小于k,求有多少种切法. 数据范围:\(n \le 2000\). 题解 ...
- 51nod 矩阵快速幂(模板题)
1113 矩阵快速幂 基准时间限制:3 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 给出一个N * N的矩阵,其中的元素均为正整数.求这个矩阵的M次方.由于M次方的计算结果太大 ...
- 51nod 1273 旅行计划(思维题)
一开始看到这题真的有点懵逼...一直在想着套算法,结果题解除了sort和dfs其他什么都没用到 显然每次到达的一定都是叶子,先从根节点dfs一遍,按深度对叶子降序排序,按这个顺序向根节点dfs,路径上 ...
- 51nod 1717 好数 (水题)
题目: 看起来很复杂,其实就是有多少个素因子就翻转多少次. 然后考虑到只有平方数有奇数个素因子. 一次过,上代码把: #include <iostream> #include <al ...
- 51nod 1096 距离之和最小 思维题,求中位数
题目: 在一条直线上,与两个点距离之和最小的点,是怎样的点? 很容易想到,所求的点在这两个已知点的中间,因为两点之间距离最短. 在一条直线上,与三个点距离之和最小的点,是怎样的点? 由两个点的规律,我 ...
- 51nod 1218 最长递增子序列 | 思维题
51nod 1218 最长递增子序列 题面 给出一个序列,求哪些元素可能在某条最长上升子序列中,哪些元素一定在所有最长上升子序列中. 题解 YJY大嫂教导我们,如果以一个元素结尾的LIS长度 + 以它 ...
- 51nod 1086背包问题V2 (完全背包模板题)
1086 背包问题 V2 1 秒 131,072 KB 20 分 3 级题 题目描述 有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1, ...
- 区间dp(入门题)
区间dp:顾名思义就是在区间上进行动态规划,通过合并小区间求解一段区间上的最优解. 常见模板: for(int len=1;len<n;len++){//区间长度 for(int be=1;be ...
随机推荐
- Android之仿今日头条顶部导航栏效果
随着时间的推移现在的软件要求显示的内容越来越多,所以要在小的屏幕上能够更好的显示更多的内容,首先我们会想到底部菜单栏,但是有时候像今日头条新闻客户端要显示的内容太多,而且又想在主界面全部显示出来,所以 ...
- bzoj3105 [cqoi2013]新Nim游戏——贪心+线性基
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3105 首先,要先手必胜,就不能取后让剩下的火柴中存在异或和为0的子集,否则对方可以取成异或和 ...
- JSP-Runoob:JSP 调试
ylbtech-JSP-Runoob:JSP 调试 1.返回顶部 1. JSP 调试 要测试/调试一个JSP或servlet程序总是那么的难.JSP和Servlets程序趋向于牵涉到大量客户端/服务器 ...
- openStack调试
- 51. ExtJs4之Ext.util.JSON编码和解码JSON对象
转自:https://blog.csdn.net/iteye_9439/article/details/82518158 1.decode() 该方法用于将符合JSON格式的String进行解码成为一 ...
- Linux特殊符号及基础正则表达式
第1章 特殊符号 1.1 引号系列 1.1.1 单引号 所见即所得 单引号里面的内容会原封不动的输出 [root@oldboyedu50-lnb ~]# echo 'oldboy $LANG $PS ...
- [Apple开发者帐户帮助]九、参考(1)证书类型
该证书类型有助于开发者帐户和Xcode的标识证书. 类型 目的 APNs Auth Key 生成服务器端令牌,以替代通知请求的证书. Apple推送服务 在通知服务和APN之间建立连接,以向您的应用提 ...
- zb的生日-------搜索 和 动态规划
简单的贪心算法 : http://love-oriented.com/pack/P01.html 说实话 我是喜欢 动态规划的.......但是省赛迫在眉睫 , 只好先 学 搜索了 , 赶紧 ...
- 331 Verify Preorder Serialization of a Binary Tree 验证二叉树的前序序列化
序列化二叉树的一种方法是使用前序遍历.当我们遇到一个非空节点时,我们可以记录这个节点的值.如果它是一个空节点,我们可以使用一个标记值,例如 #. _9_ / \ 3 2 ...
- Elasticsearch之CURL命令的HEAD
如果只想检查一些文档是否存在,我们可以使用HEAD来替代GET方法,这样就只会返回HTTP头文件. [hadoop@master elasticsearch-]$ curl -i XHEAD http ...