P2926 [USACO08DEC]Patting Heads S
2021/6/1 18:21:54
本文主要是介绍P2926 [USACO08DEC]Patting Heads S,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
原题链接
考察:约数
这题很久以前做过一次,但我没写博客,结果再来一次我还是不会(.)
错误思路:
倍数法求每个a[i]的倍数,基本代码如下:
for(int i=1;i<=n;i++) { scanf("%d",&a[i]); for(int j=1;j<=M/a[i];j++) sum[j*a[i]]++; }
一旦数据出现大量1+1e6或者其他小的数,时间复杂度会退化到O(n、*m)还是十分恐怖
正确思路:
如果不能倍数法求约数就考虑试除法求约束,枚举每个数的约数时间复杂度是O(n\(\sqrt{m}\))只有108还是十分可观,我们只需要计数每个数字的次数即可.
Code
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int N = 1e5+10; int a[N],cnt[N*10],ans[N]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); cnt[a[i]]++; } for(int i=1;i<=n;i++) { for(int j=1;j<=a[i]/j;j++) { if(a[i]%j==0) ans[i]+=cnt[j]; if(a[i]%j==0&&j!=a[i]/j) ans[i]+=cnt[a[i]/j]; } printf("%d\n",ans[i]-1); } return 0; }
这篇关于P2926 [USACO08DEC]Patting Heads S的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26MATLAB 中 A(7)=[];什么意思?-icode9专业技术文章分享
- 2024-11-26UniApp 中如何实现使用输入法时保持页面列表不动的效果?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中怎么实现输入法弹出时禁止页面向上滚动?-icode9专业技术文章分享
- 2024-11-26WebSocket是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-26页面有多个ref 要动态传入怎么实现?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中实现一个底部输入框的常见方法有哪些?-icode9专业技术文章分享
- 2024-11-26RocketMQ入门指南:搭建与使用全流程详解
- 2024-11-26RocketMQ入门教程:轻松搭建与使用指南
- 2024-11-26手写RocketMQ:从入门到实践的简单教程
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版