题意:

给你n个数vi,你有k次操作。每一次操作你可以从n个数里面挑一个数,然后使得这个数乘于一个正整数。操作完之后,这n个数里面不同数的数量就是权值。你要使得这个值尽可能小。

题解:

如果a%b==0 && a!=b

  b%c==0 && b!=c

那么如果我们进行操作的话,肯定是把c变成a,因为这样消耗的最小操作数最少

我们最后的答案只需要在两种情况中取最小值就可以了

1、我们把n个数都往n个数的公倍数上变

2、如果这n个数里面出现了上面所示的a、b、c的情况,那么我们就把b、c这些数都往a上变

过程:

因为题目求的是操作完之后不同数的数量,那么我们首先记录一下每一个数的出现次数

然后在提前处理一下每一个数的倍数是否在这n个数里面

然后按照每一个数出现的次数排序。为什么?给你一个序列

1 1 2 4

我们如果只有一个操作,那么肯定是把2变成4.这样的话答案就是2

这就意味着,我们要使得1变成4的话,那么只有操作数大于等于3的时候才对最后的结果造成影响

之后就模拟就可以了

AC代码:

/*
有两种操作,要么是把一种数全部变成他的倍数(尽量大且存在的倍数),要么是将尽量多种类的数变成所有数的公倍数。 那么我们只需要维护出每种数是否存在其倍数,就只能这种数能否进行第一种操作。 只要对每个数因数分解,然后给因数打上标记,就可以知道每个数是否存在其倍数了。复杂度n*sqrt(t),t代表数据范围。
*/ #include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <vector>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 5;
const int INF=0x3f3f3f3f;
const int mod = 1000000007;
int v[maxn],num[maxn],vis[maxn],que1[maxn],que2[maxn];
int main()
{
freopen("equal.in","r",stdin);
freopen("equal.out","w",stdout);
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d",&v[i]);
num[v[i]]++;
}
for(int i=1;i<=n;++i)
{
int tmp=v[i];
if(tmp!=1) vis[1]=1;
int ends=sqrt(tmp);
for(int j=2;j<=ends;++j)
{
if(tmp%j==0)
{
vis[j]=1;
vis[tmp/j]=1;
}
}
}
int pos1=0,pos2=0;
for(int i=1;i<=1000000;++i)
{
if(num[i]==0) continue;
int tmp=i;
if(vis[tmp])
{
que1[pos1++]=num[tmp];
}
que2[pos2++]=num[tmp];
}
sort(que1,que1+pos1);
sort(que2,que2+pos2);
//printf("%d****%d %d\n",pos1,que1[0],que1[1]);
int ans1=0,ans2=0,tmp1=0,tmp2=0;
printf("%d ",pos2);
for(int i=1;i<=n;++i)
{
tmp1+=1;
while(tmp1>=que1[ans1] && ans1<pos1)
{
tmp1-=que1[ans1];
ans1++;
} tmp2+=1;
while(tmp2>=que2[ans2] && ans2<pos2)
{
tmp2-=que2[ans2];
ans2++;
} if(i!=n)
printf("%d ",pos2-max(ans1,ans2-1));
else printf("%d\n",pos2-max(ans1,ans2-1));
}
return 0;
}

Equal Numbers Gym - 101612E 思维的更多相关文章

  1. Sheldon Numbers GYM -- 枚举

    Sheldon Numbers GYM 题意:定义Sheldon Number为其二进制数是ABA……ABA型的或者ABAB……AB的,其中A全为1,B全为0(A>0, B>0),问[m, ...

  2. Codeforces gym101612 E.Equal Numbers(贪心)

    传送:http://codeforces.com/gym/101612 题意:给出一个大小为n的序列a[i],每次选其中一个数乘以一个正整数,问进行k步操作后最少剩下多少种数字,输出0≤k≤n,所有的 ...

  3. Codeforces.GYM101612E.Equal Numbers(贪心)

    题目链接 \(Description\) 给定\(n\)个数,每次可以将任意一个数乘上任意一个正整数. 求\(k\)次操作后,数列中数的种类最少可以是多少.对每个\(0\leq k\leq n\)输出 ...

  4. Random Numbers Gym - 101466K dfs序+线段树

    Tamref love random numbers, but he hates recurrent relations, Tamref thinks that mainstream random g ...

  5. Gym - 101981E 思维

    Gym - 101981EEva and Euro coins 题意:给你两个长度皆为n的01串s和t,能做的操作是把连续k个相同的字符反转过来,问s串能不能变成t串. 一开始把相同的漏看了,便以为是 ...

  6. equal numbers

    给你一个n长度的数组,让你修改0到n次,问每次修改后能剩下不同个数的最小数是多少: 这里有了两种做法,一种是变成他们的lcm这样的话,修改后答案应该是减去改过的个数然后在加一 另一种就是数字修改成序列 ...

  7. Problem D. Berland Railroads Gym - 101967D (思维)

    题目链接:https://cn.vjudge.net/contest/274029#problem/D 题目大意:给你0-9每个数的个数,然后让你找出最大的数,满足的条件是任意三位相连的都能被三整除. ...

  8. Numbers(CodeForces-128D)【思维/list】

    题目链接:https://vjudge.net/problem/CodeForces-128D 题意:给出一组数,要求将这些数排列成一个环,满足每相邻两个数的差值为1,问能否完成. 思路:先取出最小的 ...

  9. Simple Robot Gym - 101102I (思维)

    SaMer is building a simple robot that can move in the four directions: up (^), down (v), left (<) ...

随机推荐

  1. .NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ Masstransit 详解)--学习笔记

    2.6.7 RabbitMQ -- Masstransit 详解 Consumer 消费者 Producer 生产者 Request-Response 请求-响应 Consumer 消费者 在 Mas ...

  2. Shiro配置Session检测时Quartz版本冲突

    项目背景: shiro 1.3 + quartz 2.x 2018-9-11 22:20:35补充: 经过测试,本人发现 ,通过实现 org.apache.shiro.session.mgt.Exec ...

  3. Server 2012 R2 Standard 安装运行PCS7时出现“无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll”解决方法

    网上看到了这篇文章https://www.jianshu.com/p/21f4bb8b5502,根据思路自己尝试,解决了丢失的问题.提示[计算机中丢失api-ms-win-crt-runtime-l1 ...

  4. SonarQube学习(五)- SonarQube之自定义规则使用

    一.前言 古人云:"欲速则不达",最近真的是深有体会.学习也是如此,不是一件着急的事,越是着急越不会. 就拿SonarQube来说吧,去年年末就想学来着,但是想着想着就搁置了,有时 ...

  5. Mongodb 安装和副本集集群搭建

    通用步骤,适用于所有你需要用的软件. 总结为5大步骤: 找到官网-->下载包-->解压-->修改配置-->启动 不懂的,首选官网api,次选百度 1.安装mongodb mon ...

  6. 【Linux】ps -ef 和ps aux 的区别

    Linux下显示系统进程的命令ps,最常用的有ps -ef 和ps aux.这两个到底有什么区别呢?两者没太大差别,讨论这个问题,要追溯到Unix系统中的两种风格,System V风格和BSD 风格, ...

  7. leetcode 31. Next Permutation (下一个排列,模拟,二分查找)

    题目链接 31. Next Permutation 题意 给定一段排列,输出其升序相邻的下一段排列.比如[1,3,2]的下一段排列为[2,1,3]. 注意排列呈环形,即[3,2,1]的下一段排列为[1 ...

  8. Golang应用性能问题排查分析

    背景 公司有一个使用golang开发的采集模块,负责调用多个外部系统采集数据:最近做了一次架构上的调整,将采集模块分成api.job两个子模块,并部署到容器中,拆分前部署在虚机上. 现象 部分采集任务 ...

  9. 与图论的邂逅05:最近公共祖先LCA

    什么是LCA? 祖先链 对于一棵树T,若它的根节点是r,对于任意一个树上的节点x,从r走到x的路径是唯一的(显然),那么这条路径上的点都是并且只有这些点是x的祖先.这些点组成的链(或者说路径)就是x的 ...

  10. 2.4V升5V芯片,8uA功耗,低功耗升压电路图

    2.4V升5V,可用于USB拔插充电,也可以用于把两节镍氢电池2.4V升压到5V,的固定输出稳压电压值,同时输出电流可达1A,0.5A等 首先是先说下0.5A的这款的话,是比较低功耗的,8uA左右的输 ...