【HDOJ5514】Frogs(容斥原理)
题意:n个青蛙在一个有m个节点的圆上跳,m个节点的标号为0-m-1,每只青蛙每次跳的节点数给出,让求n只青蛙所跳位置标号之和
n<=1e4,m<=1e9,a[i]<=1e9
思路:由裴蜀定理可知该问题等价于[0,m-1]能被至少一个gcd(m,a[i])整除的数字之和
因为n过大,考虑与m的因子个数相关的算法,因子个数<=200
做因子之间的容斥,每一个因子a[i]的贡献t=贡献次数*a[i]*(m/a[i]-1)*(m/a[i])/2
后面部分是一个等差数列
算完每一个因子的贡献之后再维护其倍数因子的贡献
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
#define N 40000
#define M 32
#define oo 10000000
#define MOD 105225319 int a[N],vis[N]; int gcd(int x,int y)
{
if(!y) return x;
return gcd(y,x%y);
} int main()
{
int cas;
scanf("%d",&cas);
for(int v=;v<=cas;v++)
{
int n,m;
scanf("%d%d",&n,&m);
memset(vis,,sizeof(vis));
int tot=;
for(int i=;i*i<=m;i++)
if(m%i==)
{
a[++tot]=i;
if(i*i!=m) a[++tot]=m/i;
}
sort(a+,a+tot+);
for(int i=;i<=n;i++)
{
int x;
scanf("%d",&x);
int t=gcd(m,x);
for(int j=;j<=tot;j++)
if(a[j]%t==) vis[j]=;
}
ll ans=;
for(int i=;i<=tot;i++)
if(vis[i])
{
ll t=m/a[i];
ans+=(ll)a[i]*t*(t-)/*vis[i];
for(int j=i+;j<=tot;j++)
if(a[j]%a[i]==) vis[j]-=vis[i];
}
printf("Case #%d: %I64d\n",v,ans);
}
return ;
}
【HDOJ5514】Frogs(容斥原理)的更多相关文章
- HDU 5514 Frogs (容斥原理+因子分解)
题目链接 题意:有n只青蛙,m个石头(围成圆圈).第i只青蛙每次只能条ai个石头,问最后所有青蛙跳过的石头的下标总和是多少? 题解:暴力肯定会超时,首先分解出m的因子,自己本身不用分,因为石头编号是0 ...
- 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 [题目大意] m个石子围成一圈,标号为0~m-1,现在有n只青蛙,每只每次跳a[i]个石子, ...
- Frogs
Problem Description There are m stones lying on a circle, and n frogs are jumping over them.The ston ...
- hdu 5514 Frogs(容斥)
Frogs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- HDU 5514.Frogs-欧拉函数 or 容斥原理
Frogs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- HDU5514 Frogs
/* HDU5514 Frogs http://acm.hdu.edu.cn/showproblem.php?pid=5514 容斥原理 * * */ #include <cstdio> ...
- hdu4059 The Boss on Mars(差分+容斥原理)
题意: 求小于n (1 ≤ n ≤ 10^8)的数中,与n互质的数的四次方和. 知识点: 差分: 一阶差分: 设 则 为一阶差分. 二阶差分: n阶差分: 且可推出 性质: 1. ...
- hdu2848 Visible Trees (容斥原理)
题意: 给n*m个点(1 ≤ m, n ≤ 1e5),左下角的点为(1,1),右上角的点(n,m),一个人站在(0,0)看这些点.在一条直线上,只能看到最前面的一个点,后面的被档住看不到,求这个人能看 ...
随机推荐
- axios常见传参方式
1:get请求 一般发送请求是这么写 axios.get('/user?id=12345&name=user') .then(function (res) { console.log(res) ...
- ubuntu crontab设置定时任务
ubuntu 设置定时任务 crontab -l #查看详情crontab -e #设置定时任务 * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用* ...
- python 正则表达式与JSON字符串
目录 正则表达式 概括单字符集 匹配单字符 匹配字符集 普通字符与元字符 元字符和普通的字符的混用 数量词{整数|*|+|?} 匹配指规则的字母 贪婪模式 匹配指定长度的字符串 非贪婪模式 匹配指定长 ...
- 使用virtualbox安装的Ubuntu,窗口分辨率过小,使用增强工具完成和vmtools一样的功能。
今天用VirtualBox成功装上Ubuntu10.04之后发现了一个问题:默认情况下 ubuntu 的分辨率最高只能设到800*600.但是对于自己的大显示器,在分辨率800*600的ubuntu窗 ...
- 2015-2016 Northwestern European Regional Contest (NWERC 2015)
训练时间:2019-04-05 一场读错三个题,队友恨不得手刃了我这个坑B. A I J 简单,不写了. C - Cleaning Pipes (Gym - 101485C) 对于有公共点的管道建边, ...
- P1880 [NOI1995]石子合并【区间DP】
题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子合并成1 ...
- System.AccessViolationException”类型的第一次机会异常在 System.Data.dll 中发生 其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
管理员cmd中运行 netsh winsock reset
- 图文教程:为认证考试搭建Hyper-V家庭实验室
[TechTarget中国原创] 在过去20年里,我已经帮助成千上万人准备他们的IT认证考试.虽然有很多方法通过技术来获得经验,组建一个Hyper-V家庭实验室是个利用不同应用程序来获得经验的廉价并有 ...
- Ntdsutil.exe
Ntdsutil.exe 编辑 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! Ntdsutil.exe 是一个为 Active Directory 提供管理设施的命令行工具 ...
- Asp.net自定义控件开发任我行(6)-嵌入资源下
摘要 上一章,我们讲了嵌入.css文件,这一章,我们来讲一下嵌入.js文件,也顺带一个嵌入Image文件 内容 我们前面的几章,一运行,下拉框就显示出来了,但是DropDwonList的下拉框是被隐藏 ...