HDU 5514 Frogs
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5514
题目描述:
有n只青蛙,m个石头(围成圆圈)。第i只青蛙每次只能条ai个石头,问最后所有青蛙跳过的石头的下标总和是多少?
解题思路:
第i只青蛙只能走到gcd(ai, m)的位置,我们就可以把m的因子提取出来,然后对青蛙能走到的因子位置打标记。青蛙能走到vis[i]因子位置就把vis[i]标记为1,然后num[i]表示m的第i个因子泪加的次数。如果vis[i]!=num[i]的话,就更新num。因子的个数大概是log2(m),所以时间复杂度大概为O(log2(m)2)。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long LL;const int maxn = 1e5 + 10;
int vis[maxn], num[maxn];
int p[maxn];
int gcd(int a, int b)
{return b? gcd(b, a%b) : a;
}
int main()
{int T, n, m, pos, a;scanf("%d", &T);for(int cas = 1; cas <= T; cas++){scanf("%d%d", &n, &m);int k = (int)sqrt(m);pos = 0;for(int i = 1; i <= k; i++){if(m%i == 0){p[pos++] = i;if(i*i != m)p[pos++] = m/i;}}memset(vis, 0, sizeof(vis));memset(num, 0, sizeof(num));sort(p, p+pos);for(int i = 0; i < n; i++){scanf("%d", &a);int t = gcd(a, m);for(int j = 0; j < pos; j++)if(p[j]%t == 0)vis[j] = 1;}vis[pos-1] = 0;LL ans = 0;for(int i = 0; i < pos; i++){if(vis[i] != num[i]){int t = (m-1)/p[i];ans += (LL)t*(t+1)/2 * p[i] * (vis[i]-num[i]);t = vis[i] - num[i];for(int j = i; j < pos; j++)if(p[j]%p[i] == 0)num[j] += t;}}printf("Case #%d: %lld\n", cas, ans);}return 0;
}
HDU 5514 Frogs相关推荐
- HDU 5514 Frogs (容斥原理)
题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=5514 题意 : 有m个石子围成一圈, 有n只青蛙从跳石子, 都从0号石子开始, 每只能越过a[i] ...
- HDU 5514 Frogs 容斥
http://acm.hdu.edu.cn/showproblem.php?pid=5514 没有想到怎么利用gcd的性质来改进指数级别的容斥,还是没有理解容斥的思想,只知道基础的. 已经知道结果就在 ...
- HDU 5514 Frogs 欧拉函数
题意: 有\(m(1 \leq m \leq 10^9)\)个石子排成一圈,编号分别为\(0,1,2 \cdots m-1\). 现在在\(0\)号石头上有\(n(1 \leq n \leq 10^4 ...
- HDU 5514 Frogs(欧拉函数+数论YY)
传送门 Frogs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- HDU 5514 Frogs (容斥原理+因子分解)
题目链接 题意:有n只青蛙,m个石头(围成圆圈).第i只青蛙每次只能条ai个石头,问最后所有青蛙跳过的石头的下标总和是多少? 题解:暴力肯定会超时,首先分解出m的因子,自己本身不用分,因为石头编号是0 ...
- HDU - 5514 Frogs(容斥原理)
题目链接:点击查看 题目大意:给出 0 ~ m - 1 共 m 个石头首尾相连呈现出一个环状,初始时在第 0 个石头上有 n 只青蛙,n 只青蛙相互独立,每一只青蛙每次都会向前跳 a[ i ] 步,问 ...
- HDU 5514 Frogs
题意 有一群青蛙,一开始都在0点,有一堆圈石子,编号从0~m-1的. 青蛙只能顺时针跳,每个青蛙可以一次跳a[i]格,然后所有青蛙都这样一直跳下去,这些青蛙踩过的石子的编号和是多少? 思考 读了题,以 ...
- HDU - 5514 Frogs
题目大意:有n只青蛙,每只青蛙的弹跳能力为ai,他们都从0出发,绕着m个石头围成的圈子跳跃,石头编号为0~m-1,问能被跳到的石头编号之和 具体思路:首先可以发现弹跳能力为ai的青蛙,可以跳到的石头编 ...
- Frogs HDU - 5514
Frogs HDU - 5514 题意: 有n个青蛙,第 i 个青蛙每次只能够跳 ai步,现在有m个石头围成一圈,编号为0到m−1,现在青蛙可以围着这个石头组成的圆跳无限次,每跳一次就会占领这个石头 ...
最新文章
- css3属性box-sizing:border-box 用法解析
- Oracle-HWM(High Water Mark) 高水位解读
- 判断字符串NSString是否是整形或者浮点型
- windows配置solr5.5.2(不通过tomcat,使用内置jetty)
- LeetCode【7--整数反转】 LeetCode【8--字符串转整数】
- sql 解锁被锁定的账号
- linux rpm包,安装路径查看及改变rpm包默认安装路径
- urllib2.URLError: urlopen error [Errno 111] Connection refused
- linux8如何开启多个桌面,CentOS8安装GNOME3桌面并设置开机启动图形界面
- 全国大数据分析系统基于vue echarts
- ahjesus sql2005+游标示例
- StyleWriter英文润色软件使用说明(含破解安装包)
- 2022年茶艺师(中级)考试题及茶艺师(中级)考试技巧
- Microsoft Teams安排 Teams 实时事件
- 登录起凡是显示计算机拒绝无法连接,起凡名将录出现第三方登陆失败怎么办 解决方案一览...
- 棋牌---这些年使用过的技术
- U-BOOT添加命令
- java毕业生设计寻艺画室网站计算机源码+系统+mysql+调试部署+lw
- Win11桌面右下角水印怎么去除?
- 制作OTA升级整包增量包
热门文章
- 幼儿园教案我和计算机比本领,幼儿园说课稿:比本领
- [Editing] TP-LINK740N v5 firmware Crack
- 磁带机LTO类型简单介绍(Tape drive LTO type)
- 【边做项目边学Android】手机安全卫士07-手机防盗之进入限制
- 新海诚画集[秒速5センチメートル:樱花抄·铁道]
- H5浪漫告白气球表白
- 【java基础】java继承从“我爸是李刚”讲起
- 「递归」第4集 | 退役黑客带你走进白帽子的江湖
- Spring Cloud kubernetes入门项目sck-demo
- YOUTH(年轻)——Samuel Ullman(塞缪尔·乌尔曼)