HDU 5812 Distance
从a变到b,也就是将a一直除素因子,除到1为止,然后乘b的素因子,一直乘到b。
但是gcd(a,b)部分是不用除下去的。所以d(a,b)=a/gcd(a,b)的素因子个数+b/gcd(a,b)的素因子个数。
然后....脑洞开始......
枚举这个因子P,然后去计算a/P的素因子个数+b/P的素因子个数 最小值,也就是要在集合中寻找到一个b,使得式子取得最小值。
然后....可以搞一个数组 c[因子][素因子个数]=多少种情况 来存储集合中的信息。 然后删除,插入的时候维护这个数组即可。具体看看代码。
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-;
void File()
{
freopen("D:\\in.txt","r",stdin);
freopen("D:\\out.txt","w",stdout);
}
inline int read()
{
char c = getchar(); while(!isdigit(c)) c = getchar();
int x = ;
while(isdigit(c)) { x = x * + c - ''; c = getchar(); }
return x;
} const int maxn=;
int f[maxn],c[maxn][],fac[maxn],sz;
bool m[maxn];
queue<int>Q; bool prime(int x)
{
if(x==) return ;
for (int i=;i*i<=x;i++) if(x%i==) return ;
return ;
} void pre()
{
memset(f,,sizeof f);
for(int i=;i<=;i++)
{
if(!prime(i)) continue; f[i]=;
int u=i+i; while(u<=) { int t=u; while(t%i==) f[u]++,t=t/i; u=u+i; }
}
} void get(int x)
{
sz=;
for(int i=;i*i<=x;i++)
{
if(x%i!=) continue; int x1=i,x2=x/i;
fac[sz++]=x1; if(x2!=x1) fac[sz++]=x2;
}
} void Insert(int x) { m[x]=; get(x); for(int i=;i<sz;i++) c[fac[i]][f[x/fac[i]]]++; }
void Delete(int x) { m[x]=; get(x); for(int i=;i<sz;i++) c[fac[i]][f[x/fac[i]]]--; } void Find(int x)
{
int ans=; get(x);
for(int i=;i<sz;i++) for(int j=;j<=;j++)
if(c[fac[i]][j]) ans=min(ans,j+f[x/fac[i]]);
if(ans==) ans=-; printf("%d\n",ans);
} int main()
{
pre(); int cas=,n;
while(~scanf("%d",&n))
{
if(n==) break; printf("Case #%d:\n",cas++);
memset(c,,sizeof c); memset(m,,sizeof m);
for(int i=;i<=n;i++)
{
char op[]; int x; scanf("%s%d",op,&x);
if(op[]=='I') { if(m[x]) continue; Insert(x); }
else if(op[]=='D') { if(!m[x]) continue; Delete(x); }
else Find(x);
}
}
return ;
}
HDU 5812 Distance的更多相关文章
- HDU 4712Hamming Distance(随机函数运用)
Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- hdu 4712 Hamming Distance(随机函数暴力)
http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...
- HDU 5102 The K-th Distance(模拟)
题意:输入一棵树,输出前k小的点对最短距离dis(i,j)的和. 模拟,官方题解说得很清楚了.不重复了. http://bestcoder.hdu.edu.cn/ 需要注意的是,复杂度要O(n+k), ...
- HDU 4712:Hamming Distance
Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- hdu 4712 Hamming Distance 随机
Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- HDU 4712 Hamming Distance(随机算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4712 题目大意:任意两个数按位异或后二进制中含1的个数被称为海明距离,给定n个数,求出任意其中两个最小 ...
- hdu 4712 Hamming Distance ( 随机算法混过了 )
Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- HDU 472 Hamming Distance (随机数)
Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) To ...
- HDU 4712 Hamming Distance(随机算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4712 解题报告:输入n个数,用十六进制的方式输入的,任意选择其中的两个数进行异或,求异或后的数用二进制 ...
随机推荐
- Ansible hostvars
1. inventory hosts file 中的server 变量会覆盖group变量. hostvars: { "iaas_name": "test", ...
- 怎样取json对应的值
{ "轮胎1":[{"数量": "1","型号": "195 65R15","售价&quo ...
- 图片的 base64 编码
图片的 base64 编码就是将一幅图片编码成一串字符串,使用该字符串代替图像地址.我们所看到的网页上的图片,都是需要消耗一个 http 请求下载而来的:(所有才有了 csssprites 技术< ...
- SSD 和 SAS 意外造 raid 1
一台机器的磁盘更换后, 一个 SSD 和 一个 SAS 做了 raid 1 , 诡异情况,询问 IDC 同事中. 有可能是打开了 热备.
- 线段树解决leetcode307. Range Sum Query - Mutable
在下面的图中,求[0,0]和[1,1]区间元素和, 对于[0,0] start =0 ,end = 0, 查到root = 4 [0-1]的节点,mid = 0, 此时mid > end-1,表 ...
- c++实现快速排序详细分析
快速排序坑挺多的,今天有空记录一下自己的实现,并加上详细的注释和举例 #include<iostream> using namespace std; int partion(int num ...
- JAVA中数组总结(课堂总结)
数组的特点: Arrays(数组)一种简单的数据结构元素具有相同的数据类型一旦创建之后,尺寸保持不变元素在内存中连续分布例子一:按引用与按值传递的示例源代码: // PassArray.java // ...
- Hibernate5-课程笔记2
单表的增删改查操作: (1)定义获取Session和SessionFactory的工具类: package com.tongji.utils; import org.hibernate.Session ...
- 【转】母函数(Generating function)详解 — TankyWoo(红色字体为批注)
母函数(Generating function)详解 - Tanky Woo 在数学中,某个序列的母函数(Generating function,又称生成函数)是一种形式幂级数,其每一项的系数可以提供 ...
- express学习点滴- methodOverride
app.use(express.methodOverride());在app.js中可以看到这个中间件,去翻文档,几乎没有提到.一番寻找,整理如下. 作用是使用REST风格的http请求时,进行改写后 ...