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个数,用十六进制的方式输入的,任意选择其中的两个数进行异或,求异或后的数用二进制 ...
随机推荐
- informix 存储过程结构
1.简介 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行 ...
- web.xml Attribute "xmlns" was already specified for element "web-app"
报错信息:Attribute "xmlns" was already specified for element "web-app" 由于项目的重命名,出现了x ...
- php添加扩展插件
给PHP安装扩展的方式有好多 一.重新编译 进入PHP源码目录./configure --prefix=/usr/local/php ...[其他编译参数] 二.通过phpize添加扩展 进入PHP源 ...
- unsupported major.minor version 52.0,错误
Make sure that all the classes needed by the application have been compiled with a compatible java v ...
- 云信推送通知 APN invalid Token
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #e4af09; min-height: 14.0px } ...
- LEK-Introduction
LEK - logstash + elasticsearch + Kibana Elasticsearch, Logstash, and Kibana — designed to take data ...
- Ubuntu14.04安装完全分布式Hadoop1.2.1
一直想装hadoop集群,但总是没有时间,最近抽了三天时间下定决定装了一下,在我的wmware上虚拟了一台Ubuntu14.04,然后再复制了两台虚拟机,准备开始!!!! 基本参考 http://ww ...
- 32bit程序在64bit操作系统下处理重定向细节(转自http://bbs.pediy.com/showthread.php?t=89054)
1. 64bit操作系统的重定向机制以及目的 在64bit操作系统中,为了无缝兼容32bit程序的运行,64bit的Windows操作系统采用重定向机制.目的是为了能让32bit程序在64bit的操作 ...
- 利用LinkedList实现洗牌功能
分2步: 1.生成扑克牌. 2.洗牌. package com.dongbin.collection; import java.util.LinkedList; import java.util.Ra ...
- wxpython 安装教程
wxpython在windows 上的安装,需要在wxpython官网上下载对应的版本:Python分为32和64位系统不是系统的32位和64位 所以可以先在IDE 下输入Python看下当前是32还 ...