HDU 5321 Beautiful Set
题目链接
我们能够枚举子集的大小k。求出全部大小为k的子集对答案的贡献。问题就攻克了。
注意到欧拉函数的性质:n=∑φ(d),d|n
莫比乌斯函数性质:∑d|nμ(d)=0n>1
感谢http://blog.csdn.net/u013368721/article/details/47125353
#include <bits/stdc++.h>
using namespace std;
#define prt(k) cerr<<#k" = "<<k<<endl
typedef long long ll;
typedef long long LL;
const ll inf = 0x3f3f3f3f;
const int mod = 258280327;
int exgcd(int a, int b, int &x, int &y)
{
if (b == 0) {
x = 1; y = 0; return a;
} else {
int d = exgcd(b, a%b, y, x);
y -= a/b * x;
return d;
}
}
int inv(int a)
{
int x, y, b = mod;
exgcd(a, b, x, y);
if (x < 0) x += mod;
return x;
}
const int N = 102333;
int phi[N];
int fac[N], vf[N];
void init()
{
fac[0] = 1;
vf[0] = 1;
for (int i=1;i<N;i++) {
phi[i] = i;
fac[i] = (LL) fac[i - 1] * i % mod;
vf[i] = inv(fac[i]);
}
for (int i=2;i<N;i++) if (phi[i]==i) {
for (int j=i;j < N; j+=i)
phi[j] = phi[j] / i * (i - 1);
}
}
int C(int n, int m)
{
return (LL) fac[n] * vf[m] % mod * vf[n - m] % mod;
}
int cnt[N];
int n;
int id[N];
bool cmp(int a, int b)
{
return cnt[a] > cnt[b];
}
// cnt[i] : i 的倍数有多少个
void solve()
{
int ans1 = 0, ans2 = 0;
for (int i=1;i<N;i++) {
int tmp = 0;
for (int j=1;j<N && cnt[id[j]]>=i;j++) {
int idx = id[j];
int t = (LL) C(cnt[idx],i) * phi[idx] % mod;
tmp = (tmp + t) % mod;
}
ans2 = (ans2 + (LL) i * tmp % mod) % mod;
tmp = (LL) tmp * fac[i] % mod * fac[n-i+1] % mod;
ans1 = (ans1 + tmp) % mod;
}
if (ans1 > ans2) printf("Mr. Zstu %d\n", ans1);
else {if (ans1 < ans2)
printf("Mr. Hdu %d\n", ans2);
else
printf("Equal %d\n", ans1);
}
}
int main()
{
init();
while (scanf("%d", &n)==1) {
memset(cnt, 0 ,sizeof cnt);
for (int i=0;i<n;i++) {
int x; scanf("%d", &x);
cnt[x] ++;
}
for (int i=1;i<N;i++) {
id[i] = i;
for (int j=i+i;j<N;j+=i) {
cnt[i] += cnt[j];
}
}
sort(id+1, id+N, cmp);
solve();
}
return 0;
}
HDU 5321 Beautiful Set的更多相关文章
- HDU 5321 Beautiful Set (莫比乌斯反演 + 逆元 + 组合数学)
题意:给定一个 n 个数的集合,然后让你求两个值, 1.是将这个集合的数进行全排列后的每个区间的gcd之和. 2.是求这个集合的所有的子集的gcd乘以子集大小的和. 析:对于先求出len,len[i] ...
- HDU 5321 Beautiful Set 漂亮集合
题意:给定一个集合,含有n个数.浙理工先生和杭电先生各自有计算这个集合漂亮值的方法. 浙理工先生的计算方法是:对于这个n个数的某个排列,此排列的漂亮值为这个排列全部的区间最大公约数之和.然后这个集合的 ...
- HDU 5062 Beautiful Palindrome Number(数学)
主题链接:http://acm.hdu.edu.cn/showproblem.php? pid=5062 Problem Description A positive integer x can re ...
- HDU - 6351 Beautiful Now
Beautiful Now HDU - 6351 Anton has a positive integer n, however, it quite looks like a mess, so he ...
- HDU Redraw Beautiful Drawings 推断最大流是否唯一解
点击打开链接 Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 ...
- HDU 5179 beautiful number 数位dp
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5179 bc(中文): http://bestcoder.hdu.edu.cn/contes ...
- HDU 6351.Beautiful Now-暴力、全排列、思维 (2018 Multi-University Training Contest 5 1002)
2018 Multi-University Training Contest 5 6351.Beautiful Now 题意就是交换任意两个数字,问你交换k次之后的最小值和最大值. 官方题解: 哇塞, ...
- hdu - 4782 - Beautiful Soup(模拟)
题意:输出一堆乱排版的html标签,去多余空字符,转换为按缩进输出. 题目链接:pid=4782">http://acm.hdu.edu.cn/showproblem.php?pid= ...
- hdu 5179 beautiful number
beautiful number 问题描述 令 A = \sum_{i=1}^{n}a_i * {10}^{n-i}(1\leq a_i \leq 9)A=∑i=1nai∗10n−i ...
随机推荐
- spring-boot 集成 swagger 问题的解决
spring-boot 集成 swagger 网上有许多关于 spring boot 集成 swagger 的教程.按照教程去做,发现无法打开接口界面. 项目由 spring mvc 迁移过来,是一个 ...
- MVC总结--数据传递
View->Controller 1.传统方式,Get方式提交.在Controller中获得client请求: string Name = Request["name"]; ...
- MySQL数据迁移问题
最近尝试了一下小型数据迁移.本地迁移,windows平台,修改配置文件中的data_dir项,然后将旧的data文件下的数据文件全部拷贝过去. 之后登陆数据库,竟然1145错误.可以看到数据库的结构, ...
- 忽略警告注解@SuppressWarnings详解
简介:java.lang.SuppressWarnings是J2SE 5.0中标准的Annotation之一.可以标注在类.字段.方法.参数.构造方法,以及局部变量上. 作用:告诉编译器忽略指定的警告 ...
- jBoss设置jvm参数
jBoss版本: jboss-5.1.0.GA jboss-6.0.0.Final jboss-5.1.0.GA和jboss-6.0.0.Final修改方法: 打开%JBOSS_HOME%\bin ...
- C++ Primer笔记6_STL之泛型算法
1.泛型算法: 大多数算法定义在头文件algorithm中.标准库还在头文件numeric中定义了一组数值泛型算法 仅仅读算法: 举例: find函数用于找出容器中一个特定的值,有三个參数 int v ...
- 点滴积累【C#】---序列化和反序列化
序列化和反序列化效果图: 序列化和反序列化代码: 需要添加两个命名空间: using System.IO; using System.Runtime.Serialization.Formatters. ...
- vivado设计四:自定义IP核测试
在vivado设计三中:http://blog.chinaaet.com/detail/37177已经建立了vivado工程和封装好了自定义IP核. 那么接下来,我们对这个自定义IP核进行测试了:我们 ...
- 1.文件I/O
一. open()&close() #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h& ...
- 关于linux PPA源问题
添加PPA: 1.首先进入ubuntu系统,system—>administration—>update manager—>setting,在软件源界面,点击other softwa ...