【The 2017 BAPC】C题-Collatz Conjecture ---- GCD+优化去重

2023-05-16

这里写图片描述

题意: 给你一个大小为n的序列,让你求里面所有子串的GCD,求里面最多有多少不同的GCD。

思路: 利用集合set–tmp维护 到当前子串的最后一个元素的所有GCD,set–ans保存所有不同种类的GCD。
分析一下为什么不会超时,一开始以为这个算法很暴力,觉得是O(n^2 * logn)
其实,我们猜想最暴力的情况 即,1 ,2 , 4, 8 ,16,…… ,2^n 这组数据,我们会以为
1<=n<=5e5,这样子一定非常暴力! 其实!不是!!
为什么呢?因为——-元素ai 要在[1,1e18]这个范围内,所以2^n <= 10^18
两遍同取log2 可以 转换—–> n<= 18log2(10) 这个 数字约等于60,远远小于5e5,所以这个算法复杂度差不多为O(n*18log2(10) * logn)。

AC代码: 临摹超霸ORZ

#include<bits/stdc++.h>
using namespace std;
#define pb                          push_back
#define sz(x)                       int(x.size()-1)
#define all(x)                      x.begin(),x.end()
#define rep(i,s,e)                  for (int i=s;i<=e;i++)
#define rev(i,s,e)                  for (int i=e;i>=s;i--)
typedef long long LL;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const int MAXN = 5e5 + 5;
LL gcd(LL a,LL b)
{
    if(!b) return a;
    else return gcd(b,a%b);
}
set<LL> tmp1,tmp2,ans;
set<LL> ::iterator it;
LL a[MAXN];
int main()
{
    #ifdef LOCAL
    freopen("in.txt","r",stdin);
    #endif
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int n;
    cin>>n;
    rep(i,1,n) cin>>a[i];
    int f = 0;
    rep(i,1,n)
    {
        if(f)
        {
            tmp1.clear();
            for(it = tmp2.begin();it!=tmp2.end();it++)
            {
                LL x = gcd(a[i],*it);
                tmp1.insert(x);
                ans.insert(x);
            }
            tmp1.insert(a[i]);
            ans.insert(a[i]);
        }
        else
        {
            tmp2.clear();
            for(it = tmp1.begin();it!=tmp1.end();it++)
            {
                LL x = gcd(a[i],*it);
                tmp2.insert(x);
                ans.insert(x);
            }
            tmp2.insert(a[i]);
            ans.insert(a[i]);
        }
        f ^= 1;
    }
    cout<<ans.size()<<endl;
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【The 2017 BAPC】C题-Collatz Conjecture ---- GCD+优化去重 的相关文章

随机推荐

  • Java基础总结二

    Java关键字 xff08 特点及关键字作用 xff09 xff1a xff08 1 xff09 被Java语言赋予特殊含义的单词 xff08 53个含两个保留字 xff09 xff08 2 xff09 关键字都是小写 xff08 3 xf
  • SVN快速使用入门

    协同开发时 xff0c 我们时常会听说SVN这个词 xff0c 那么SVN到底是什么 xff1f 又是怎么玩的 xff1f 笔者在初探SVN后进行一个简单的总结 SVN xff1a Subversion的简称 xff0c 是一个开放源代码的
  • 解决Red Hat6.0以上使用yum命报错Loaded plugins: product-id, refresh-packagekit, security, subscription-manager

    什么是yum xff1a Yum xff08 全称为 Yellow dog Updater Modified xff09 是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器 基于RPM包管理 xff0c 能够从
  • Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found

    org apache ibatis exceptions PersistenceException Error updating database Cause org apache ibatis executor ExecutorExcep
  • [Linux] 记录一次批量开关机操作

    最近公司需要停一部分机器测试下业务稳定性 关停很简单 ansible 就可以了 xff0c 一句命令 ansible guanji m command a 34 shutdown h now 34 定义的关机组 guanji 过了两周 xf
  • 生活篇

    春天 xff0c 一个诗情画意的季节 xff0c 一个生机勃勃的季节 春天 xff0c 为我们带来了温暖 xff0c 为大地带来了生机 在这个春意盎然的季节 xff0c 大自然也开始了她们的春天交响曲 我喜欢三月 xff0c 我也讨厌三月
  • WebStorm 2023.1 最新变化【附带ChatGPT教程】

    ChatGPT开源公众号 xff1a https gitee com wy521a astar weixin mp 观看更新概览视频 在浏览器中打开更新变化 WebStorm 2023 1 最新变化 框架和技术 Astro 支持 备受期待的
  • Ubuntu18.04解决gnome-tweak-tool安装后shell主题提示user-theme extension没有启用的问题

    换用Ubuntu18之后 xff0c 桌面又回到了gnome xff0c 因此找到了gnome tweak tool对桌面进行美化 1 安装gnome tweak tool sudo apt get install gnome tweak
  • 多生产者和多消费者问题

    题目描述 桌子上有一个盘子 xff0c 每次只能向其中放入一个水果 爸爸专门向盘子里面放苹果 xff0c 妈妈专门向盘子里面放橘子 xff1b 只有盘子为空时 xff0c 爸爸或妈妈才可以向其中放入水果 xff1b 仅当盘子里有自己需要的水
  • ssh远程连接服务器常用命令

    命令行下 xff0c 使用ssh 远程登录服务器 ssh 39 用户名 39 64 39 IP地址 39 不用加 39 号 xff0c 这里是为了作区分 39 用户名 39 64 39 IP地址 39 39 s password xxx 项
  • 记录在安卓webview上,gif,apng,pixi.js,lottie-web动画导致闪屏问题

    随着公司项目对动画要求越来越高 xff0c 从由美术提供简单的gif 或者css js开发简单动画变成了使用渲染引擎pixi js使用序列帧动画 xff0c 或者使用龙骨 xff0c spine等更加复杂炫酷的动画 但是发现屏幕在播放动画的
  • 黑苹果_万能OpenCore_0.8.4_EFI

    对于喜欢折腾黑苹果的人来说 xff0c 安装Mac系统就是家常便饭 xff0c 其中最重要的就是EFI的配置 xff0c 配置出一个适合自己电脑的EFI很重要 xff0c 今天发布这篇文章就是为了提供给新加入的伙伴们 xff0c 让更多的伙
  • 黑苹果_OpenCore_0.8.4各项功能精解

    黑苹果已经延续有些年了 xff0c 引导也更新换代过好几次 xff0c 安装黑苹果的第一个条件就是需要拥有一个支持引导苹果系统的EFI xff0c 否则 xff0c 连苹果皮都看不到 xff0c 虽然网上可以直接下载EFI xff0c 但是
  • Github域名解析连接慢问题

    Github域名解析连接慢问题 1 Github访问慢问题2 Github连接解决方案2 1 使用 Gitee 的镜像仓库2 2 配置本地的 hosts 文件 3 DNS域名解析分析3 1 根域名服务器3 1 顶级域名服务器3 1 域名解析
  • C++判断素数(求素数)

    素数又称质数 所谓素数是指除了 1 和它本身以外 xff0c 不能被任何整数整除的数 xff0c 例如17就是素数 xff0c 因为它不能被 2 16 的任一整数整除 思路1 xff1a 因此判断一个整数m是否是素数 xff0c 只需把 m
  • Directx工具修复工具,专注修复C++动态链接DLL文件

    问题 xff1a 方法一 xff1a 可以直接去360管家中搜索DirectX xff0c 然后下载 xff0c 进行修复 方法二 xff1a 如下 xff1a DirectX修复工具最新版 xff1a DirectX Repair V3
  • shell脚本实现在任意虚拟机上 一键重启/关闭 多台虚拟机

    shell脚本实现在任意虚拟机上 一键重启 关闭 多台虚拟机 span class token operator span span class token operator span bin span class token operat
  • ChatGPT体验地址,超多功能,附公众号源码

    GPT 说明效果演示地址体验公众号源码 说明 ChatGPT是一种基于深度学习的自然语言处理 xff08 NLP xff09 技术 xff0c 它可以实现自然的文字对话 ChatGPT是基于预训练的语言模型 xff0c 使用大量的数据和计算
  • Android Native内存泄漏案例

    文章目录 背景现状malloc debugLeakTracer综合评估功能性能稳定性治理实践 案例 使用Raphael 定位内存泄漏 项目中遇到一个内存泄漏的情形 xff1a usb camera预览时出现了内存泄漏 xff0c 但内存泄漏
  • 【The 2017 BAPC】C题-Collatz Conjecture ---- GCD+优化去重

    题意 给你一个大小为n的序列 xff0c 让你求里面所有子串的GCD xff0c 求里面最多有多少不同的GCD 思路 xff1a 利用集合set tmp维护 到当前子串的最后一个元素的所有GCD xff0c set ans保存所有不同种类的