从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的更多相关文章

  1. HDU 4712Hamming Distance(随机函数运用)

    Hamming Distance Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  2. hdu 4712 Hamming Distance(随机函数暴力)

    http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...

  3. HDU 5102 The K-th Distance(模拟)

    题意:输入一棵树,输出前k小的点对最短距离dis(i,j)的和. 模拟,官方题解说得很清楚了.不重复了. http://bestcoder.hdu.edu.cn/ 需要注意的是,复杂度要O(n+k), ...

  4. HDU 4712:Hamming Distance

    Hamming Distance Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  5. hdu 4712 Hamming Distance 随机

    Hamming Distance Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  6. HDU 4712 Hamming Distance(随机算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4712 题目大意:任意两个数按位异或后二进制中含1的个数被称为海明距离,给定n个数,求出任意其中两个最小 ...

  7. hdu 4712 Hamming Distance ( 随机算法混过了 )

    Hamming Distance Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  8. HDU 472 Hamming Distance (随机数)

    Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) To ...

  9. HDU 4712 Hamming Distance(随机算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4712 解题报告:输入n个数,用十六进制的方式输入的,任意选择其中的两个数进行异或,求异或后的数用二进制 ...

随机推荐

  1. 关闭Pycharm拼写检查(Mac)

    1.关闭拼写检查,preference-->Editor-->Inspections-->Spelling-->Typo,取消勾选 2.关闭代码风格检查,preference- ...

  2. python修炼6

    文件操作 注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法. 1.打开文件 (相当于桌面的快捷方式)f=open(文件名,模式默 ...

  3. 关于java web开发需要哪些技术要求(简单的web界面管理系统)

    目前, 国内外信息化建设已经进入基于Web应用为核心的阶段, Java作为应用于网络的最好语言,前景无限看好.然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情.概括一下,实施Ja ...

  4. date,datetime,timestamp 的区别

    date 表示年月日,如YY-MM-DD datetime 表示年月日和时间信息,如YY-MM-DD HH:MM:SS datestamp 和datetime表示的信息相同,但时间范围不同 时间范围 ...

  5. webservice底层使用Socket进行网络调用

    服务端代码(其实tomcat的原理也是这样): 客户端代码:

  6. 10676 涂鸦跳跃(sort)

    10676 涂鸦跳跃 该题有题解 时间限制:1000MS  内存限制:65535K提交次数:240 通过次数:19 题型: 编程题   语言: G++;GCC Description 你玩过曾经风靡一 ...

  7. npm 使用代理

    npm install 有时候会安装失败,可能是网络的问题,可以使用代理来安装 npm获取配置有6种方式,优先级由高到底. 命令行参数. --proxy http://server:port即将pro ...

  8. JS逻辑运算大于小于比较

    遇到这个问题,结果测试了好半天终于发现原因, 例子: var az = $('#a').css('zIndex'); // 1001 var bz = $('#b').css('zIndex'); / ...

  9. git的使用,将本地项目push到github上

    Git教程(推荐): http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000git是先用a ...

  10. 第七十七节,CSS3前缀和rem长度单位

    CSS3前缀和rem长度单位 学习要点: 1.CSS3前缀 2.长度单位rem 本章主要探讨HTML5中CSS在发展中实行标准化的一些问题,重点探讨CSS3中新属性前缀问题和新的单位rem. 一 CS ...