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 ...
随机推荐
- python冒泡算法
array = [1,2,3,6,5,4,28,2,1,9,3,0,200,2,9,3,2,98,33,988,22,0,223,0,33,78,222,88,32,0,238,883,2,0,23] ...
- C#中怎样获取当前路径的几种方法
String apppath = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase; //获取整个文件路径名 a ...
- RCC 2014 Warmup (Div. 2) A~C
近期CF的pretext真是一场比一场弱.第一次在CF上被卡cin.cout.... A. Elimination time limit per test 1 second memory limit ...
- Sphinx-实战
配置完成后, 有了数据源.索引文件存储位置等, 便可以使用 indexer 工具创建索引, 收集要被检索的数据 -c 指定配置文件 默认使用 etc/sphinx.conf --all 对所有索引重新 ...
- javascript解析器(引擎)
The JavaScript interpreter in a browser is implemented as a single thread. javascript 引擎在浏览器中作为单线程实现 ...
- ss - float浮动模块的高度问题 解决方案
当一个Div中的子元素都是浮动元素时,该div是没有高度的.通常会带来很多困扰,解决方案如下: 低版本统配兼容: overflow: hidden; 下面是不支持低配浏览器,而且似乎该效果对 P 标签 ...
- Canvas转换为Blob对象并使用Ajax发送
Canvas转换为Blob对象并使用Ajax发送 转换为Blob对象后,可以使用Ajax上传图像文件. 先从canvas获取dataurl, 再将dataurl转换为Blob对象 var dataur ...
- 某某水表-M1卡数据算法分析
# 某某水表-M1卡数据算法分析 ## 卡片数据-----------------------------扇区数据 | 金额:--- |:---13EC 0000 0000 0000 0000 000 ...
- iOS 小数点精度问题处理
实际开发中有时候经常会需要去处理小数点精度问题,如果是整数保留整数,如果有小数则保留不为0的的小数,最大2位小数 eg: 2.013 ---> 2.01 2.0 ---> 2 2.10 - ...
- Java 编程
1,Java实体如果复写构造方法,一定要显式指定默认构造方法 2,集合初始化下面这种方法不可取 因为双括号初始化(DBI)创建了一个匿名类,该类引用了拥有对象的实例,如果匿名内部类被其他对象返回并持有 ...