题目链接:Frogs

题目大意:有一个n个洞的圈,编号从0到m-1,然后有n只青蛙,起始为编号0,每次的步数是k步,问无限的时间后所有可以被青蛙访问的洞的编号

题目思路:我们可以很轻易的想到用gcd(k,m)判断这只青蛙能访问的哪些洞,然后我们发现如果有一只青蛙的gcd是3,而另一只是6,这只青蛙根本做不了贡献,所以我们考虑我们先筛出来m的因子,然后判断贡献,如果有6有3,那么3的贡献算一次后6的贡献得倒算一次,所以我们得容斥去算,我们可以判断num[i]为访问次数,而vis[i]为是否有这个因子,然后贡献叠加就好了,具体看代码就能懂


#include <map>
#include <set>
#include <cmath>
#include <stack>
#include <queue>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>using namespace std;
typedef long long ll;
const int maxn = 1e4+10;ll n,m,T;
int fac[maxn],vis[maxn],num[maxn];int main(){scanf("%lld",&T);for(int Case = 1;Case <= T;Case++){memset(vis,0,sizeof(vis));memset(num,0,sizeof(num));scanf("%lld%lld",&n,&m);int tot = 0;for(int i = 1;i*i <= m;i++){if(m%i == 0){fac[tot++] = i;if(i*i != m) fac[tot++] = m/i;}}sort(fac,fac+tot);tot--;ll x,d;for(int i = 1;i <= n;i++){scanf("%lld",&x);d = __gcd(x,m);for(int j = 0;j < tot;j++){if(fac[j]%d == 0) vis[j] = 1;}}ll ans = 0;for(int i = 0;i < tot;i++){if(vis[i] != num[i]){ll t = (m-1)/fac[i];ans += t*(t+1)/2*fac[i]*(vis[i]-num[i]);for(int j = i+1;j < tot;j++){if(fac[j]%fac[i] == 0)num[j] += vis[i]-num[i];}}}printf("Case #%d: %lld\n",Case,ans);}return 0;
}

hdoj 5514 Frogs相关推荐

  1. HDU 5514 Frogs (容斥原理)

    题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=5514 题意 : 有m个石子围成一圈, 有n只青蛙从跳石子, 都从0号石子开始, 每只能越过a[i] ...

  2. HDU 5514 Frogs

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5514 题目描述: 有n只青蛙,m个石头(围成圆圈).第i只青蛙每次只能条ai个石头,问最后所有青蛙跳过 ...

  3. HDU 5514 Frogs 容斥

    http://acm.hdu.edu.cn/showproblem.php?pid=5514 没有想到怎么利用gcd的性质来改进指数级别的容斥,还是没有理解容斥的思想,只知道基础的. 已经知道结果就在 ...

  4. HDU 5514 Frogs(欧拉函数+数论YY)

    传送门 Frogs Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  5. HDU 5514 Frogs (容斥原理+因子分解)

    题目链接 题意:有n只青蛙,m个石头(围成圆圈).第i只青蛙每次只能条ai个石头,问最后所有青蛙跳过的石头的下标总和是多少? 题解:暴力肯定会超时,首先分解出m的因子,自己本身不用分,因为石头编号是0 ...

  6. HDU - 5514 Frogs(容斥原理)

    题目链接:点击查看 题目大意:给出 0 ~ m - 1 共 m 个石头首尾相连呈现出一个环状,初始时在第 0 个石头上有 n 只青蛙,n 只青蛙相互独立,每一只青蛙每次都会向前跳 a[ i ] 步,问 ...

  7. HDU 5514 Frogs 欧拉函数

    题意: 有\(m(1 \leq m \leq 10^9)\)个石子排成一圈,编号分别为\(0,1,2 \cdots m-1\). 现在在\(0\)号石头上有\(n(1 \leq n \leq 10^4 ...

  8. HDU 5514 Frogs

    题意 有一群青蛙,一开始都在0点,有一堆圈石子,编号从0~m-1的. 青蛙只能顺时针跳,每个青蛙可以一次跳a[i]格,然后所有青蛙都这样一直跳下去,这些青蛙踩过的石子的编号和是多少? 思考 读了题,以 ...

  9. HDU - 5514 Frogs

    题目大意:有n只青蛙,每只青蛙的弹跳能力为ai,他们都从0出发,绕着m个石头围成的圈子跳跃,石头编号为0~m-1,问能被跳到的石头编号之和 具体思路:首先可以发现弹跳能力为ai的青蛙,可以跳到的石头编 ...

最新文章

  1. layer.msg();怎么关闭
  2. python笔记基础-Python基础教程学习笔记-1
  3. 七十八、 回溯法解决八皇后问题
  4. c语言必背数据结构_数据结构(C语言)考试重点必背
  5. linux rpm 没有返回,容易忘记的linux命令之rpm
  6. 【Modern OpenGL】转换 Transformations
  7. python求小于n的所有素数_用python求出2000000内所有素数的和?不知怎么写?
  8. 如何把表格做成源代码_他来了,他来了,文字、表格、公式图片识别神器V0.1测试版...
  9. Django模板:for标签,for标签内置变量forloop
  10. pycharm 右键无法显示unittest框架解决右键只有unittest 运行如何取消右键显示进行普通run...
  11. 2019年春PAT甲级考试
  12. 超级超级实用的整个网页截图技巧
  13. NPN型三极管基础知识解析
  14. CS5801HDMI转EDP转换器芯片参考资料|CS5801HDMI转EDP转换方案说明
  15. Leedcode 875. 爱吃香蕉的珂珂
  16. QQmail2007
  17. python整型图_[宜配屋]听图阁
  18. 学习 Python3 这一篇就够了
  19. python设置编码格式_python如何统一编码格式UltraEdit环境python语法高亮设置
  20. 设置cmd命令提示符窗口的界面语言为英文

热门文章

  1. AES加密c语言实现
  2. 实验任务(三)---密码破解技术
  3. R语言神经网络量化交易模型
  4. Linux Graphics 周刊(第 9 期)
  5. 艾永亮:回力鞋生死的92年,风靡全球后没落,如今成功逆袭
  6. Windows独享主机如何查看服务器系统日志?
  7. ZZULIOJ:1099: 角谷猜想(多实例测试)
  8. 两个基于爬虫的项目: Kiwix ArchiveBox
  9. 项目0单节点的虚拟机做大数据开发(四万字全)
  10. Android Wi-Fi 修改国家码(QCOM平台)