题目

分析

首先我们知道,原A序列其实表示一个矩阵,而这个矩阵的对角线上的数字就是答案B序列。

接着\(a、b>=gcd(a,b)\),所以序列A中的最大的数就是ans[1],第二大的数就是ans[2]。

但是ans[3]并不一定就是序列A中的第三大的数,因为gcd(ans[1],ans[2])有可能是序列A中的第三大的数。

所以但找到了ans[i],对于每个gcd(ans[i],ans[1~i-1])在序列A中删掉两个(就是删掉2(i-1)个。为什么是两个自己考虑)。时间复杂度\(O(n^2log_2n)\)

至于如何删掉gcd(ans[i],ans[1~i-1]),有两种方法:hash和二分

这里讲二分的方法:

因为已经将序列A从大到小排好了序,接着二分出位置最小的gcd(ans[i],ans[1~i-1])的位置,设位置为pos,接着将bz[pos]、bz[pos+1]赋值为false。

再设next,将next[pos]加二,下次删除就从next[pos]开始。如此类推。

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
const int mo=1000000007;
const int N=1005;
using namespace std;
int a[N*N],sum[N*N],n,m,ans[N*N],tot,next[N*N];
bool bz[N*N];
bool cmp(int x,int y)
{
return x>y;
}
int gcd(int x,int y)
{
if(y==0) return x;
if(x<y) return gcd(y,x);
else return gcd(y, x%y);
}
int rf(int l,int r,int p)
{
while(l+1<r)
{
int mid=(l+r)/2;
if(a[mid]>p)
l=mid;
else
r=mid;
}
if(p==a[l])
return l;
else
return r;
}
int main()
{
scanf("%d",&n);
a[0]=maxlongint;
memset(bz,true,sizeof(bz));
for(int i=1;i<=n*n;i++)
{
scanf("%d",&a[i]);
next[i]=i;
}
sort(a+1,a+n*n+1,cmp);
ans[1]=a[1];
int k=1;
for(int i=2;i<=n*n && k<n;i++)
{
if(bz[i])
{
ans[++k]=a[i];
for(int j=1;j<=k-1;j++)
{
int p=gcd(ans[j],ans[k]);
int pos=rf(i+1,n*n,p);
bz[next[pos]]=bz[next[pos]+1]=false;
next[pos]=next[pos]+2;
}
}
}
for(int i=1;i<=n;i++)
printf("%d ",ans[i]);
}

【NOIP2016提高A组模拟8.15】Password的更多相关文章

  1. NOIP2016提高A组模拟10.15总结

    第一题,就是将原有的式子一步步简化,不过有点麻烦,搞了很久. 第二题,枚举上下边界,维护一个单调队列,二分. 比赛上没有想到,只打了个暴力,坑了80分. 第三题,贪心,最后的十多分钟才想到,没有打出来 ...

  2. 【NOIP2016提高A组模拟10.15】打膈膜

    题目 分析 贪心, 先将怪物按生命值从小到大排序(显然按这个顺序打是最优的) 枚举可以发对少次群体攻击, 首先将所有的群体攻击发出去, 然后一个一个怪物打,当当前怪物生命值大于2,如果还有魔法值就放重 ...

  3. 【NOIP2016提高A组模拟10.15】最大化

    题目 分析 枚举两个纵坐标i.j,接着表示枚举区域的上下边界, 设对于每个横坐标区域的前缀和和为\(s_l\),枚举k, 显然当\(s_k>s_l\)时,以(i,k)为左上角,(j,k)为右下角 ...

  4. 【NOIP2016提高A组模拟10.15】算循环

    题目 分析 一步步删掉循环, 首先,原式是\[\sum_{i=1}^n\sum_{j=1}^m\sum_{k=i}^n\sum_{l=j}^m\sum_{p=i}^k\sum_{q=j}^l1\] 删 ...

  5. 【NOIP2016提高A组模拟9.15】Map

    题目 分析 发现,当原图是一棵树的时候,那么新建一条边后,就会变成环套树, 而环内的所有点对都是安全点对,如果环中有k个点,答案就是\(k(k-1)\) 联想到,当把原图做一遍tarjan缩点,每个环 ...

  6. 【NOIP2016提高A组模拟9.15】Osu

    题目 分析 考虑二分答案, 二分小数显然是不可取的,那么我们将所有可能的答案求出来,记录在一个数组上,排个序(C++调用函数很容易超时,手打快排,时间复杂度约为\(O(>8*10^7)\),但相 ...

  7. 【NOIP2016提高A组模拟9.15】Math

    题目 分析 因为\((-1)^2=1\), 所以我们只用看\(\sum_{j=1}^md(i·j)\)的值模2的值就可以了. 易证,一个数x,只有当x是完全平方数时,d(x)才为奇数,否则为偶数. 那 ...

  8. 【NOIP2016提高A组模拟8.15】Garden

    题目 分析 其实原题就是[cqoi2012][bzoj2669]局部极小值. 有一个n行m列的整数矩阵,其中1到nm之间的每个整数恰好出现一次.如果一个格子比所有相邻格子(相邻是指有公共边或公共顶点) ...

  9. 【NOIP2016提高A组模拟8.15】Throw

    题目 分析 首先对于一个状态(a,b,c),假定a<=b<=c: 现在考虑一下这个状态,的转移方案: \[1,中间向两边跳(a,b,c)-->(a*2-b,a,c).(a,b,c)- ...

随机推荐

  1. qrcode-reader——二维码识别

    JavaScript QRCode reader for HTML5 enabled browser 参考资料1:[https://www.npmjs.com/package/qrcode-reade ...

  2. 前端深入之css篇丨2020年前,彻底掌握css动画

    马上就2020年了,不知道小伙伴们今年学习了css3动画了吗? 说起来css动画是一个很尬的事,一方面因为公司用css动画比较少,另一方面大部分开发者习惯了用JavaScript来做动画,所以就导致了 ...

  3. unable to compile class for jsp解决方案

    今天遇到了一个错误,纠结了两天,百度很多经验,结果都不太起效.通过比较自己之前不报错的项目,发现以下解决方案. 报错: 解决方案: 1.先将jar 包复制到lib目录下. 2.将lib目录下的jar包 ...

  4. 【Qt开发】QTableWidget的详细设置

    在使用Qt不多的日子里,已经两次用到了QTableWidget这个控件,也慢慢的习惯和喜欢上了它.再使用QTableWidget的时候,已不像刚开始使用时的迷茫.嗯嗯.现在就来总结总结我与QTable ...

  5. Python基础数据类型int

    整型int 赋值运算符 a=1 a+=1 #a=a+1 a-=1 #a=a-1 a*=1 #a=a*1 a/=1 #a=a/1 a**=1 #a=a**1 a%=1 #a=a%1 算数运算符 + - ...

  6. Python常用库整理

    Python常用库整理 Python中到底有哪些库会让程序员爱不释手?以至于一次上瘾,造成永久性伤害(这句话好像在哪里见过),今天我们就来整理一番这样的库,欢迎各位在评论区或者私信我添加或者修改相关库 ...

  7. mysql数据库基础命令(一)

    用户与权限 创建用户 mysql>create user test identified by 'BaC321@#'; 修改密码 ##5.5版本及以前的命令 mysql>set passw ...

  8. LVS负载均衡常用的工作模式有NAT、DR、和TUN三种,其中DR模式性能最为优越,使用最为广泛。

    一.安装LVS LVS的编译安装参考本站文章:http://www.linuxe.cn/post-192.html,对于LVS这种功能性软件,在生产中用yum安装也是没有问题的. 1 yum inst ...

  9. 【Java】 Java常用的几个设计模式实例

    一.单例模式 public class SingletonDemo { public static void main(String[] args) { // } } class User1{//饿汉 ...

  10. Error:Unexpected lock protocol found in lock file. Expected 3, found 49.

    关于这个错误,今天研究了两三个小时的时间,查看网上的教程都解决不了问题,后来发现是自己的文件目录导入的有问题. 现在把自己关于解决这个问题的详细步骤说明一下. (1)首先,你先查看一下自己导入文件的目 ...