【学习笔记】「ROI 2018 Day 2」无进位加法
先放一个大佬的博客:「loj - 2850」「ROI 2018 Day 2」无进位加法
用数据结构来优化搜索🤔
神一样的 Kidulthood 考场上就已经意识到了这道题的正解是搜索😅
考虑搜索过程的本质🤔
首先是找到最小的满足 t i + i t_i+i ti+i最大的点 i i i,发现对于 p ≠ t i + i p\ne t_i+i p=ti+i的情况都可以直接回溯掉,否则先把 [ 1 , i − 1 ] [1,i-1] [1,i−1]全部删掉,然后将其后继插入到序列当中。可以分析出递归的次数其实就是最开始选定的那个串的长度。
那么分两种情况:
1.1 1.1 1.1 成功,那么其实就不需要回溯了
1.2 1.2 1.2 不成功,那么刚开始选定的那个串就会被删掉(换句话说是把 [ 1 , i ] [1,i] [1,i]全部删掉)
这样复杂度 O ( L log L ) O(L\log L) O(LlogL)。
感性理解
remark \text{remark} remark 这玩意写成代码确实比较抽象。。。
#include<bits/stdc++.h>
#define fi first
#define se second
#define ll long long
#define pb push_back
#define db double
#define inf 0x3f3f3f3f
using namespace std;
const int N=6e5+5;
int n,m,maxL,sz[N],pre[N];
string nums[N];
vector<int>each[N];
pair<int,int>a[N];
vector<int>ps[N];
vector<int>nxt[N];
int res[N];
set<int>s;
struct node{pair<int,int>max;int add;
}t[N<<2];
void add(int p,int x){t[p].add+=x,t[p].max.fi+=x;
}
void pushdown(int p){if(t[p].add){add(p<<1,t[p].add),add(p<<1|1,t[p].add),t[p].add=0;}
}
void pushup(int p){t[p].max=max(t[p<<1].max,t[p<<1|1].max);
}
void build(int p,int l,int r){if(l==r){if(a[l].se==sz[a[l].fi]-1)t[p].max=make_pair(pre[l]+a[l].se,m-l+1),s.insert(l);else t[p].max=make_pair(pre[l]+a[l].se-inf,m-l+1);return;}int mid=l+r>>1;build(p<<1,l,mid),build(p<<1|1,mid+1,r);pushup(p);
}
void modify(int p,int l,int r,int ql,int qr,int x){if(ql>qr)return;if(ql<=l&&r<=qr){add(p,x);return;}int mid=l+r>>1;pushdown(p);if(ql<=mid)modify(p<<1,l,mid,ql,qr,x);if(mid<qr)modify(p<<1|1,mid+1,r,ql,qr,x);pushup(p);
}
void update(int p,int l,int r,int x,int y){if(l==r){t[p].max.fi+=y;return;}int mid=l+r>>1;pushdown(p);x<=mid?update(p<<1,l,mid,x,y):update(p<<1|1,mid+1,r,x,y);pushup(p);
}
int solve(int p){if(t[1].max.fi<=0)return 1;vector<int>tmp;int p2=t[1].max.fi,u=m-t[1].max.se+1,cnt=0;if(p2>p)return 0;while(*s.begin()!=u){cnt++;int cur=*s.begin();modify(1,1,m,cur,m,-1);update(1,1,m,cur,-inf);tmp.pb(cur);s.erase(cur);}modify(1,1,m,u,m,-1);update(1,1,m,u,-inf);s.erase(u);for(int i=p2-1;i>=p2-cnt;i--)res[i]=1;int x=a[u].fi,y=a[u].se,r=-1;if(~nxt[x][y]){r=ps[x][nxt[x][y]];modify(1,1,m,r,m,1);update(1,1,m,r,inf);s.insert(r);}if(solve(p2-1-cnt))return res[p2-cnt-1]=1;if(~r){modify(1,1,m,r,m,-1);update(1,1,m,r,-inf);s.erase(r);}if(p2==p){for(auto cur:tmp){modify(1,1,m,cur,m,1);update(1,1,m,cur,inf);s.insert(cur);}modify(1,1,m,u,m,1);update(1,1,m,u,inf);s.insert(u);return 0;}res[p2]=1;return solve(p2-cnt);
}
int low[N],seq[N],cnt;
bool cmp(int x,int y){return low[x]<low[y];
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n;for(int i=1;i<=n;i++){cin>>nums[i],sz[i]=nums[i].size(),maxL=max(maxL,sz[i]);ps[i].resize(sz[i]),nxt[i].resize(sz[i]);for(int j=0;j<sz[i];j++)nums[i][j]-='0';reverse(nums[i].begin(),nums[i].end());int lst=-1;for(int j=0;j<sz[i];j++){if(nums[i][j]==1){each[j].pb(i);nxt[i][j]=lst;lst=j;}}}m=0;//基数排序for(int i=0;i<maxL;i++){cnt=0;for(auto e:each[i]){low[e]=(nxt[e][i]==-1)?0:ps[e][nxt[e][i]];if(nums[e][i]==1)low[e]+=inf;seq[++cnt]=e;}sort(seq+1,seq+1+cnt,cmp);for(int j=1;j<=cnt;j++){a[++m]=make_pair(seq[j],i);ps[seq[j]][i]=m;}}reverse(a+1,a+1+m);for(int i=1;i<=m;i++)ps[a[i].fi][a[i].se]=i;for(int i=1;i<=m;i++)pre[i]=pre[i-1]+(a[i].se==sz[a[i].fi]-1);build(1,1,m);solve(inf);int tp=maxL+n-1;while(tp&&res[tp]==0)tp--;for(int i=tp;i>=0;i--)cout<<res[i];
}
相关文章:
【学习笔记】「ROI 2018 Day 2」无进位加法
先放一个大佬的博客:「loj - 2850」「ROI 2018 Day 2」无进位加法 用数据结构来优化搜索🤔 神一样的 Kidulthood 考场上就已经意识到了这道题的正解是搜索😅 考虑搜索过程的本质🤔 首先是找到最小的满足 t i i t_ii tii最大…...
分布式I/O,IT和OT融合少不了它
长期以来信息技术IT和操作运营技术OT是相互隔离的,随着大数据分析和边缘计算业务的对现场级实时数据的采集需求,IT和OT有了逐渐融合的趋势。IT与OT融合,它赋予工厂的管理者监控运行和过程的能力大为增强,甚至可以预测到可能发生的…...
主干网络篇 | YOLOv8 更换主干网络之 VanillaNet |《华为方舟实验室最新成果》
论文地址:https://arxiv.org/pdf/2305.12972.pdf 代码地址:https://github.com/huawei-noah/VanillaNet 在基础模型的核心是“多样性即不同”,这一哲学在计算机视觉和自然语言处理方面取得了惊人的成功。然而,优化和Transformer模型固有的复杂性带来了挑战,需要转向简洁性…...
AD20. 如何给元器件设计、添加3D模型
Altium Designer学习笔记 - 00.目录 零. 前言 本文以HF46F继电器为例展示设计、添加元器件3D模型的流程,其他元器件类似。 一. 操作步骤 从下图可以看到此时继电器还没有添加3D模型: 1. 获取元器件尺寸 这里通过查找元器件的数据手册可以…...
C++笔记之vector的底层实现和扩容机制
C笔记之vector的底层实现和扩容机制 1. 先申请内存空间,内存空间容量变成原来的n倍(一般是原来的两倍) 2. 将原本容器中的数据拷贝到新的内存空间中 3. 释放原来的内存空间 4. 将数组指针指向新容器的内存空间 code review! 文章目录 C笔记之vector的底层实现和扩…...
JavaSE - Sting类
目录 一. 字符串的定义 二. String类中的常用方法 1. 比较两个字符串是否相等(返回值是boolean类型) 2. 比较两个字符串的大小(返回值是int类型) 3. 字符串查找 (1)s1.charAt(index) index:下标&…...
zotero+overleaf插入参考文献
zotero导出参考献bib文件 overleaf上传此biib文件 后续添加package,输出参考文献,添加引用参考http://t.csdn.cn/bC245 默认导出的bib文件信息臃肿,使用插件设置,安装过程参考http://t.csdn.cn/4HcBm…...
C语言每天一练----输出水仙花数
题目:请输出所有的"水仙花数" 题解:所谓"水仙花数"是指一个3位数,其各位数字立方和等于该数本身。 例如, 153是水仙花数, 因为153 1 * 1 * 1 5 * 5 * 5 3 * 3 * 3" #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h&g…...
Linux-Shell
1.什么是Bash shell(壳) Bash Shell是一个命令解释器,它在操作系统的最外层,负责用户程序与内核进行交互操作的一种接口,将用户输入的命令翻译给操作系统,并将处理后的结果输出至屏幕。 通过xshell连接,就是打开了一…...
Python读取csv、Excel文件生成图表
简介 本文章介绍了通过读取 csv 或 Excel 文件内容,将其转换为折线图或柱状图的方法,并写入 html 文件中。 目录 1. 读取CSV文件 1.1. 生成折线图 1.1.1. 简单生成图表 1.1.2. 设置折线图格式 1.2. 生成柱状图 1.2.1. 简单生成图表 1.2.2. 设置柱…...
虚拟机中Linux的IP地址配置详解
目录 第一章、虚拟机中Linux的IP地址配置详解1.1)什么是IP地址1.2)如何查看自己电脑ip地址1.3)虚拟机NAT模式中Linux的IP地址设置有什么要求 第二章、使用Linux中的编辑命令进行网卡信息文件的配置 友情提醒 先看文章目录,大致了…...
Codeforces Round 889 (Div. 2) 题解
晚上睡不着就来总结一下叭~(OoO) 赛后榜(希望不要被Hack...Orz) 终榜!!! 瞬间的辉煌(呜呜呜~) 先不放图了。。怕被dalaoHack...呜呜呜~ 总结 7.29半夜比赛,本来是不想打的,感觉最近做的题太多…...
系统学习Linux-MySQL用户权限管理(三)
一、用户权限管理概述 数据库用户权限管理是数据库系统中非常重要的一个方面,它用于控制不同用户访问和操作数据库的权限范围。数据库用户权限管理可以保护敏感数据和数据库结构,确保只有被授权的用户才可以操作和使用数据库,防止数据被修改…...
【雕爷学编程】MicroPython动手做(02)——尝试搭建K210开发板的IDE环境4
7、使用串口工具 (1)连接硬件 连接 Type C 线, 一端电脑一端开发板 查看设备是否已经正确识别: 在 Windows 下可以打开设备管理器来查看 如果没有发现设备, 需要确认有没有装驱动以及接触是否良好 (2&a…...
阿里云NVIDIA A100 GPU云服务器性能详解及租用费用
阿里云GPU服务器租用费用表包括包年包月、一个小时收费以及学生GPU服务器租用费用,阿里云GPU计算卡包括NVIDIA V100计算卡、T4计算卡、A10计算卡和A100计算卡,GPU云服务器gn6i可享受3折,阿里云百科分享阿里云GPU服务器租用表、GPU一个小时多少…...
数字身份、分布式存储、跨链技术等将如何推动Web3数据的发展?
Web3数据是基于区块链技术、去中心化、可信任的数据,具有较高的安全性和可信度。随着Web3.0时代的到来,Web3数据将会在金融、物联网、医疗、教育、政务等领域发挥重要的作用。其中,数字身份、分布式存储、跨链技术等将会是Web3数据发展的重要…...
Ubuntu 新增2T 硬盘,配置自动挂载
Ubuntu 台式机内存太小了,增加了一块 2T 的硬盘,记录下配置过程: 查看硬盘信息 可以看出,我电脑当前有三块硬盘: (1) /dev/nvme0n1 系统盘,256 G,分了两个区 /dev/nvme0n…...
Windows下安装HBase
Windows下安装HBase 一、HBase简介二、HBase下载安装包三、环境准备3.1、 JDK的安装3.2、 Hadoop的安装 四、HBase安装4.1、压缩包解压为文件夹4.2、配置环境变量4.3、%HBASE_HOME%目录下新建临时文件夹4.4、修改配置文件 hbase-env.cmd4.4.1、配置JAVA环境4.4.2、set HBASE_MA…...
在家构建您的迷你 ChatGPT
这篇文章分为三个部分;他们是: 什么是指令遵循模型?如何查找遵循模型的指令构建一个简单的聊天机器人废话不多说直接开始吧!!! 什么是指令遵循模型? 语言模型是机器学习模型,可以根…...
Cisco IOS操作(红茶三杯CCNA)
Cisco路由器组件 CPU:执行指令RAM:断电内容丢失 运行操作系统运行配置文件IP路由表ARP缓存数据包缓存区 ROM:保存开机自检软件,存储路由器的启动引导程序 bootstrap指令基本的自检软件迷你版IOS 非易失RAM(NVRAM&#…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
